Многие организации используют для связи с различными отделами добавочные номера, которые представляют собой числовой идентификатор. Однако у абонента, которому необходимо соединиться с определенным сотрудником, иногда возникают затруднения. Особенно часто проблемы появляются у тех, кто звонит с мобильного телефона.
Как определить, что перед вами добавочный номер?Перед тем как набрать добавочный номер с мобильного, необходимо определить действительно ли именно он перед вами. В контактных данных многих компаний для отделов с добавочными номерами указано после основного номера несколько цифр, которые обыкновенно заключаются в скобки. Либо перед ними пишут слово «добавочный». Представляют собой они код сотрудника или отдела, который определяется порядковым номером аппарата по подключению к АТС. При этом АТС может быть виртуальной и переадресовывать с звонки на "Скайп", мобильные и обычные находящиеся в различных филиалах.
Как набрать добавочный номер с мобильного?В отличие от городского стационарного аппарата мобильные телефоны автоматически переходят в В стационарном аппарате, перед тем как набрать добавочный номер телефона, необходимо нажимать *, и это поможет перейти ему на тональный режим. С телефонов, у которых для набора предусмотрен диск, звонки на такие номера будут затруднительны и возможны только в том случае, если соединение проводит оператор, а не автоответчик. Вопросы появляются у обладателей смартфонов на Android или IOS. Клавиши с цифрами при звонке обыкновенно сворачиваются. И необходимо перед тем, как набрать добавочный номер с мобильного, вызвать эту клавиатуру на экран, нажав символическую иконку. У телефонов с она представляет собой значок в виде десяти небольших квадратиков, девять из которых расположены сверху в три ряда, и еще один - снизу. При наборе добавочных цифр на мобильном вы услышите характерные звуки в динамике.
Два варианта соединения по добавочному номеруВ первом случае для звонка вам понадобится набрать основной номер. Затем дождаться ответа оператора или автоответчика и прослушать полностью сообщение. После чего необходимо набрать цифры добавочного номера, и произойдет соединение. Вам необходимо будет перезвонить, если вы попадете не в тот отдел, а ответивший на звонок человек откажется вас переключить. Хотя обычно сотрудники крупных фирм достаточно лояльно относятся к позвонившим и переводят звонок на необходимый отдел. Второй вариант того, как набрать добавочный номер с мобильного - это не ждать окончания сообщения, а сразу продолжать вводить дополнительные цифры. В данном случае возможен сбой соединения или возникновение ошибки. Сократить время на прослушивание всего сообщения могут обладатели смартфонов на базе современных платформ.
Как на мобильном набрать добавочный номер, если у вас смартфон?Для обладателей мобильных телефонов проблемой становится то, что снимать деньги со счета телефона оператор начинает с момента соединения. Поэтому если звонок на линию не бесплатный, то пользователи стараются обойтись без прослушивания сообщения с наименованием отделов и номеров. Обладатели смартфонов могут набирать любые добавочные номера при помощи кнопки паузы. Для этого вам необходимо набрать необходимые цифры, дождаться соединения. Затем нажать на паузу (её иконка обычно расположена на экране вызова) и ввести дополнительные цифры. Можно попробовать начать ввод сразу после соединения, не нажимая предварительно кнопку паузы, но этот вариант получается не всегда. При любой ошибке в таком случае лучше всего положить трубку и перезвонить. Вот и все, теперь вы знаете, как на мобильнике набрать добавочный номер.
Данный плагин для jQuery позволяет автоматически подбирать подходящую маску ввода на основе введённого начала телефонного номера. Это позволяет сделать ввод номера телефона на странице web-cайта более быстрым и безошибочным. Кроме того, разработанный плагин может быть использован в других областях, если правила ввода возможно представить в виде нескольких масок ввода.
Введение На web-сайтах очень требуется ввод информации о телефонном номере. Так сложилось, что каждая страна вправе устанавливать свои правила набора и длину номера, в результате чего между жителями разных стран периодически возникает путаница: одни привыкли указывать номер с ведущей цифрой 8 , другие - с ведущей цифрой 0 , а третьи - со знака + .Обзор существующих решений Чтобы как-то разрешить возникшую сложность и привести номера к единому формату встречаются 3 основных решения:С учётом того, что количество стран в мире относительно невелико, было принято решение составить список масок ввода для всех стран. В качестве источника использовались сведения , опубликованные на сайте международного союза электросвязи.
Сбор данной информации преподнёс немало сюрпризов. В процессе сбора сведений приходилось учитывать все возможные варианты телефонных номеров, в том числе внутри страны. Однако, ввиду большого количества обработанной вручную информации, возможно, в собранной базе остались неточности. С течением времени планируется вносить исправления в первоначальный набор.
Программная реализация В качестве ядра маски ввода была использована реализация jquery.inputmask , о которой многократно упоминалось на Хабрахабр. Данный плагин сейчас активно развивается и, к тому же, спроектирован таким образом, что для него достаточно просто писать расширения. Однако в данной задаче написать такое расширение оказалось практически невозможно. Я не стал дорабатывать или переписывать исходный плагин под свои нужды, т.к. его автор продолжает активную работу над расширением функционала, в результате чего применение моих правок может оказаться проблематичным. Поэтому мне пришлось написать плагин-надстройку над основным ядром, который отслеживает (плюс перехватывает) внешние воздействия и производит модификацию данных. Для того, чтобы внедрить свои обработчики внешних воздействий до обработчиков основного плагина использовался плагина-библиотека jquery.bind-first .Сортировка разрешённых масок ввода Для корректного выбора наиболее подходящей маски ввода весь набор масок требуется предварительно отсортировать специальным образом. При разработке правил сортировки были приняты следующие условности:В результате получились следующие правила сортировки в порядке их применения:
- keydown - отслеживаются нажатия клавиш Backspace и Delete - с целью изменения текущей маски ввода перед тем как основной обработчик удалит один символ из текста. Кроме того, отслеживается нажатие клавиши Insert, которая изменяет режим ввода текста, для синхронизации.
- keypress - поскольку вводимый символ может быть неразрешён оригинальной маской ввода (т.к. все значимые символы в ней заменены на шаблонный), требуется проверить новую строку на удовлетворение одной из разрешённых масок. В случае, если таких масок нет, то ввод символа отбрасывается, иначе - производится обновление маски ввода, после чего событие передаётся обработчику ядра.
- paste , input - вставка текста из буфера обмена. Перед передачей обработки ядру производится подбор маски ввода для строки, получившейся в результате вставки текста из буфера обмена. В случае, если маску ввода подобрать не удалось, производится посимвольное урезание текста с конца - до тех пор, пока текст не станет удовлетворять хотя бы одной маске ввода. Аналогичная операция производится при исправлении текста в поле ввода вызовом функции val(), а также при инициализации маски ввода, если она применяется к непустому полю ввода.
- dragdrop , drop - обработка аналогична событию paste.
- blur - дополнительная обработка на случай, если включен режим очистки текста при потере фокуса, если он не удовлетворяет маске ввода. Это событие перехватывается после основного обработчика, в отличие от предыдущих.
Все события навешиваются в пространстве inputmask. Это позволяет избежать некорректного поведения при вызове inputmask после инициализации надстройки (т.к. ядро при инициализации снимает все ранее установленные обработчики в пространстве inputmask).
Пример использованияФормат списка масок Список масок представляет собой JavaScript-массив объектов, предпочтительно с одинаковым набором свойств. Как минимум одно свойство, которое содержит маску ввода, должно присутствовать у всех объектов массива. Имя параметра, содержащего маску, может быть произвольным. Ниже представлен фрагмент такого массива:[ … { "mask": "+7(###)###-##-##", "cc": "RU", "name_en": "Russia", "desc_en": "", "name_ru": "Россия", "desc_ru": "" }, { "mask": "+250(###)###-###", "cc": "RW", "name_en": "Rwanda", "desc_en": "", "name_ru": "Руанда", "desc_ru": "" }, { "mask": "+966-5-####-####", "cc": "SA", "name_en": "Saudi Arabia ", "desc_en": "mobile", "name_ru": "Саудовская Аравия ", "desc_ru": "мобильные" }, { "mask": "+966-#-###-####", "cc": "SA", "name_en": "Saudi Arabia", "desc_en": "", "name_ru": "Саудовская Аравия", "desc_ru": "" }, … ] Параметры подключения плагина До подключения требуется загрузить и отсортировать список масок. Это делается выполнением следующей функции:
$.masksSort = function(maskList, defs, match, key)
- maskList - массив объектов, хранящих маски ввода (фрагмент объекта см. выше);
- defs - массив шаблонных символов (в моём случае это символ #);
- match - регулярное выражение, описывающее значимые символы (в моём случае это /|#/);
- key - имя параметра объекта массива, содержащего маску ввода.
При подключении плагину передаётся специальный объект, описывающий его работу. Данный объект содержит следующий набор параметров:
- inputmask - объект, содержащий параметры, передаваемые основному плагину inputmask;
- match - регулярное выражение, описывающее значимые символы, за исключением шаблонных;
- replace - шаблонный символ, на который будут заменены все значимые символы; может отсутствовать в объекте definitions объекта inputmask;
- list - массив объектов, описывающих маски ввода;
- listKey - имя параметра внутри объекта, хранящего маску ввода;
- onMaskChange - функция, которая вызывается при обновлении маски ввода; в качестве первого параметра передаётся объект из массива, маска ввода которого соответствует введённому тексту, а в качестве второго - точность определения маски: true - маска ввода соответствует полностью, false - для достоверного определения маски требуется ввод дополнительных символов.
Для инициализации плагина нужно применить метод inputmasks к полю ввода:
$.fn.inputmasks = function(maskOpts, mode)
- maskOpts - объект, описывающий работу плагина;
- mode - необязательный; в настоящий момент поддерживается значение isCompleted - в результате метод возвращает true , если текст, соответствующей подходящей маске, введён полностью и false в противном случае.
Маска ввода var maskList = $.masksSort($.masksLoad("phone-codes.json"), ["#"], /|#/, "mask"); var maskOpts = { inputmask: { definitions: { "#": { validator: "", cardinality: 1 } }, //clearIncomplete: true, showMaskOnHover: false, autoUnmask: true }, match: //, replace: "#", list: maskList, listKey: "mask", onMaskChange: function(maskObj, completed) { if (completed) { var hint = maskObj.name_ru; if (maskObj.desc_ru && maskObj.desc_ru != "") { hint += " (" + maskObj.desc_ru + ")"; } $("#descr").html(hint); } else { $("#descr").html("Маска ввода"); } $(this).attr("placeholder", $(this).inputmask("getemptymask")); } }; $("#phone_mask").change(function() { if ($("#phone_mask").is(":checked")) { $("#customer_phone").inputmasks(maskOpts); } else { $("#customer_phone").inputmask("+[####################]", maskOpts.inputmask) .attr("placeholder", $("#customer_phone").inputmask("getemptymask")); $("#descr").html("Маска ввода"); } }); $("#phone_mask").change(); Демонстрация Пример демонстрации разработанного плагина представлен на