Я решил это кардинальным способом, потому как номера обрезаются бывает и из-за кривого автозаполнения (на iOS, например, который заполняет номер с +7 и дублирует лишнюю 7).
В скрипте надо заменить строку с маской на mask: '+7(X99)999-99-99', и в конце дописать условие:
В РФ префиксы мобильных номеров начинаются всегда с 9 у всех операторов. После этой правки ввести первой цифрой ничего кроме 9 нельзя. Проблемы с автозаполнением тоже решились.
Больше с проблемой некорректных номеров в заказе мы с тех пор не сталкивались, хотя до этого такое было часто.
С таким не сталкивался, проверил сейчас. Но может это из-за того, что первая цифра префикса у меня только 9, поэтому номер “съехать” не может.
Забавное поведение, конечно. Даже нет мыслей, почему такое может происходить.
upd: это из-за того, что js-скрипты применяются через какое-то время после загрузки страницы.
То есть нажав “Поиск” происходит обновление страницы и при её загрузке скрипт еще не применился к полю, но в поле есть номер без формата +380951234567, и как только происходит подгрузка js-скрипта, накидывается маска и формирует цифры в поле под неё – отсюда и появляются лишние 38, обрезая конец номера.
Можно загружать скрипты до загрузки содержимого страницы и после загрузки jquery, но это надо смотреть детально.
Вы правы, с валидатором все норм.
Подскажите еще пожалуйста как в my_changes затереть этот файл
/js/lib/inputmask-multi/phone-codes.json
т.к. в нем надо изменить для Украины иначе почему-то глючит иногда , не дает сохранять
“mask”: “+38(###)###-##-##”
а то сейчас сделаю и забуду, что его менял, а какая то обнова затрет
@AndreyJ , эта библиотека подключается в app/functions/fn.common.php, в функции fn_get_phone_masks. Эту функцию ядра нельзя переписать своими изменениями, к сожалению.
Сама библиотека на github обновлялась последний раз 4 года назад.
Правьте напрямую phone-codes.json, вряд ли в нем будут изменения в ближайшее время.
А если в обновлении CS Cart и будет апдейт этого файла – вы не сможете продолжить обновление, пока не поставите галку согласия, что этот файл будет перезаписан, после чего будет сделана его копия, чтоб можно было применить правку в обновленном файле. В этом плане есть продуманность у CS Cart.
Может модуль какой накидывает его, из-за чего и конфликтует.
upd: просмаркал, этот класс есть, если в настройках установлено “Номер в международном формате”. Надо проверить еще раз настройку, если изменить её – класс уходит.
он тут есть
/js/tygh/phone_mask.js
правда я не понимать, что он делает, но вы наверняка раберетесь
и настройку эту включал… а он все равно ошибку светил эту, пока в файле не поменял
мне почему то кажется из-за того, что уже были ранее созданы юзеры с номером в формате ином, где только две цифры в скобках 9(99) а не (999)
Да, перепроверил. Он как раз и накидывает форматы из библиотеки inputmask-multi, как я понял, поэтому кастомная маска будет конфликтовать.
Решается только изменением настройки “Допустимые номера телефонов” в Настройки - Внешний вид на “Любые цифры и ±()”.
Выше ссылку на демку кидал, там я добавил маску в scripts.post.tpl и настройку изменил – оформление заказа с +38(ХХХ) не выдает ошибку. Все косяки из-за класса js-mask-phone-inited происходят.
Только этот вариант сработал, спасибо.
Что интересно - я изменил в файле /js/lib/inputmask-multi/phone-codes.json строку
{ “mask”: “+38(###)###-##-##”, “cc”: “UA”, “name_en”: “Ukraine”, “desc_en”: “”, “name_ru”: “Украина”, “desc_ru”: “” },
Ничего не произошло, а вот в один клик такое поведение без модуля маски http://joxi.ru/LmGoXkOhJYKoYm