Задать вопрос
@Esm322

Почему не срабатывает форматирование на самсунговской клавиатуре?

Подскажите, есть форматирование для введеного текста в инпут. У меня форматирование на pixel происходит, но у тестера на samsung форматирование не происходит. Добавлял дополнительный хэндлер на событие инпут и блюр, форматирование также не работает. Миксин vue 2:
export default {
    data() {
        return {
            caseNumber: '',
            useNewNumber: false,
            caseNumberLengthLower5: false,
        }
    },
    methods: {
        formatCaseNumber(value) {
            if (!value) {
                return '';
            }

            let cleanedCaseNumber = value.toUpperCase()
                .replace(/[^AА0-9\/-]/g, '')
                .replace(/^[^AА]/, '')
                .replace(/^([AА])[AА]+/g, '$1')
                .replace(/([^AА])[AА]+/g, '$1')
                .replace(/([AА])([AА]+)/g, '$1')
                .replace(/([0-9\/])([A-ZА-Я]+)/gi, '$1');

            const dashIndex = cleanedCaseNumber.indexOf('-');
            const slashIndex = cleanedCaseNumber.indexOf('/');

            if (!cleanedCaseNumber) {
                return '';
            }

            if (cleanedCaseNumber.length >= 3 && cleanedCaseNumber[1] === '0' && cleanedCaseNumber[2] === '0') {
                cleanedCaseNumber = `${cleanedCaseNumber.slice(0, 2)}${cleanedCaseNumber.slice(3)}`;
            }

            if (cleanedCaseNumber.includes('-')) {
                cleanedCaseNumber = cleanedCaseNumber
                    .replace(/-/g, (match, offset) => offset === 3 ? '-' : '');
            }

            if (cleanedCaseNumber.includes('/')) {
                cleanedCaseNumber = cleanedCaseNumber
                    .replace(/\//g, (match, offset, string) => offset === string.indexOf('/') ? '/' : '')
            }

            if (cleanedCaseNumber.length > 14 && !cleanedCaseNumber.includes('/')) {
                const beforeSlash = cleanedCaseNumber.slice(0, 14).replace(/-/g, '');
                const afterSlash = cleanedCaseNumber.slice(14).replace(/[^0-9]/g, '');
                cleanedCaseNumber = `${beforeSlash}/${afterSlash}`;
            }

            if (dashIndex !== -1 && slashIndex !== -1 && dashIndex < slashIndex) {
                const maxLengthBetween = 10;
                const start = dashIndex + 1;
                const end = slashIndex;
                const betweenLength = end - start;

                if (betweenLength > maxLengthBetween) {
                    const newEnd = start + maxLengthBetween;
                    cleanedCaseNumber = `${cleanedCaseNumber.slice(0, start)}${cleanedCaseNumber.slice(start, newEnd)}${cleanedCaseNumber.slice(slashIndex)}`;
                }
            }

            if (slashIndex !== -1) {
                const maxLengthAfterSlash = 4;
                const totalAllowedLength = slashIndex + 1 + maxLengthAfterSlash;

                if (cleanedCaseNumber.length > totalAllowedLength) {
                    cleanedCaseNumber = cleanedCaseNumber.slice(0, totalAllowedLength);
                }
            }

            return cleanedCaseNumber.slice(0, 19);
        },
        formatCaseNumberHandleOnInput() {
            // для samsung
            this.caseNumber = this.formatCaseNumber(this.caseNumber);
        },
        formatCaseNumberOnBlur() {
            // для samsung
            this.caseNumber = this.formatCaseNumber(this.caseNumber);
        },
    },
    watch: {
        caseNumber: {
            handler(newValue, prevValue) {
                if ((prevValue.length === 2 && newValue.length === 3 && !newValue.includes('-'))
                    || (prevValue.length === 0 && newValue.length === 3 && !newValue.includes('-'))) {
                    this.caseNumber = `${newValue.slice(0, 3)}-${newValue.slice(3)}`;
                }

                if (newValue.length < 5) {
                    this.caseNumberLengthLower5 = true;
                }
            },
        }
    },

В чем может причина или какое-то другое событие использовать?
  • Вопрос задан
  • 53 просмотра
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы