маскированный ввод не работает на мобильных устройствах Android?

Я использую плагин jQuery для маскированного ввода digitalbush. Он отлично работает в веб-браузерах и браузере iPhone, но не работает на мобильных устройствах Android.

Моя проблема: маска находится в поле ввода _ - _ - ___.

Когда я набираю числа, это будет 12345685555___--

Пример: http://rossbender.com/temp/mask.html

Какие-либо предложения? Как я могу это решить?

Спасибо, Прасад.


person Durga Prasad    schedule 26.08.2013    source источник
comment
Вы можете поделиться DOM, который вы использовали?   -  person Milind Anantwar    schedule 26.08.2013
comment
$('input[name=user[ssn]]').mask(999-99-9999); но все маски возвращают одинаковое поведение.   -  person Durga Prasad    schedule 26.08.2013
comment
я имею в виду html, который вы использовали?   -  person Milind Anantwar    schedule 26.08.2013
comment
Ruby on rails (страница просмотра html)   -  person Durga Prasad    schedule 26.08.2013
comment
поделитесь, пожалуйста, html-кодом?   -  person Milind Anantwar    schedule 27.08.2013
comment
‹input type=tel id=socialsecurity name=user[ssn] /› Демонстрационный сайт также не работает на мобильных устройствах Android digitalbush.com/projects/masked-input-plugin   -  person Durga Prasad    schedule 27.08.2013
comment
Вы использовали атрибут maxlength?   -  person Milind Anantwar    schedule 27.08.2013
comment
нет, потому что поле ssn имеет фиксированную длину.   -  person Durga Prasad    schedule 28.08.2013
comment
Это было исправлено некоторое время назад (11 месяцев назад), но по какой-то причине дистрибутив, размещенный на сайте, не принял изменений. Если вы берете исходный код, исправление работает: raw.github.com/digitalBush/jquery.maskedinput/master/src/   -  person Jonathan Rowny    schedule 11.12.2013
comment
@JonathanRowny Можете ли вы ответить на свой комментарий? Потому что на самом деле это решает проблему.   -  person PolGraphic    schedule 17.09.2014
comment
@DurgaPrasad Мой ответ работает для большинства людей. Вы не против отметить это как принятый ответ?   -  person Tony Brasunas    schedule 28.07.2017


Ответы (8)


Я решил эту проблему с помощью трех действий, которые исправили это для всех телефонов Android 4.0+:

  1. Обновите маскированный ввод как минимум до версии 1.4.
  2. Добавьте type="tel" к вводу, чтобы активировать цифровую клавиатуру
  3. Удалите атрибут ввода maxlength или установите для него значение, которое не будет мешать действию курсора, например 20.
person Tony Brasunas    schedule 03.04.2015
comment
У меня работало на android 4.x - person Pedro Affonso; 25.09.2015
comment
у меня работало на 5.1.1, используя маску ввода в угловой форме с использованием угловых платежей. Спасибо! - person Rob R; 23.10.2015
comment
Это сработало для меня. Проблема с клавиатурой Samsung из-за предиктивного ввода текста, которая была решена принудительным использованием цифровой клавиатуры. - person AntonK; 18.02.2016
comment
У меня работало на android 6.0.1, Note 7 - person Chad; 13.09.2016
comment
@Max - у вас уже была последняя версия маскированного ввода и было ли установлено значение maxlength? - person Tony Brasunas; 06.10.2017
comment
Это не сработало для моего приложения, заметил, что маскированный ввод больше не поддерживается, поэтому я нашел новую библиотеку: igorescobar.github.io/jQuery-Mask-Plugin Аналогичный базовый вызов и работает как шарм! - person plaidcorp; 12.03.2018

Я попытался использовать необработанный скрипт, о котором упоминал Джонатан Роуни, но у меня все еще была та же проблема в браузере S3 — Chrome. Я думаю, что это как-то связано с входами type="tel" и/или type="number". В итоге пришлось использовать другой плагин. http://igorescobar.github.io/jQuery-Mask-Plugin/

jquery-mask (не путать с jquery-masked-input) очень похож, но синтаксис немного отличается. Надеюсь, это поможет кому-нибудь еще с этой проблемой.

Синтаксис jquery-маскированного ввода: $("#phone").mask("(999) 999-9999");

VS

Синтаксис jquery-маски: ('#phone').mask('(000) 000-0000');

person duyn9uyen    schedule 20.10.2014
comment
Необработанный скрипт, упомянутый Джонатаном Роуни, не работает у меня и на Android 4.1 + Chrome. Я попробовал сценарий Игоря Эскобара (jquery-mask), упомянутый выше, и он работал отлично! - person user256604; 03.11.2014
comment
Однако скрипт Игоря Эскобара не работает на старых стандартных браузерах Android. - person Pedro Affonso; 25.09.2015

Это было исправлено некоторое время назад, но почему-то дистрибутив, размещенный на сайте, не принял изменений. Если вы берете исходный код, исправление работает: https://raw.githubusercontent.com/digitalBush/jquery.maskedinput/master/src/jquery.maskedinput.js

person Jonathan Rowny    schedule 18.09.2014
comment
я использовал вышеуказанный файл .Js. до сих пор проблема не решена. я использую ОС Android jelly bean и браузер Chtome/Firefox - person user2788596; 24.11.2014
comment
@ user2788596, возможно, это из-за кеша вашего браузера. Во всяком случае, сегодня это работает, и это версия 1.4.1, которую вы можете получить здесь github. com/digitalBush/jquery.maskedinput/tree/master/dist - person Laurent.B; 11.09.2020

Попробовав разные библиотеки масок (Inputmask, ui-mask, ngMask), я остановился на jQuery-Mask -Plugin https://igorescobar.github.io/jQuery-Mask-Plugin/, который работает очень хорошо, а также легкий и хорошо документированный и имеет образцы angularjs, react,....

person Rathma    schedule 29.07.2017

Я только что столкнулся с этой проблемой и решил ее, удалив атрибут type="number" из текстового поля asp. После этого маскированный ввод работал даже на мобильных устройствах.

person Lukas    schedule 05.11.2013

Библиотека, использованная в вопросе, больше не поддерживается. Я переключил свое приложение на ввод маски jQuery, так как он отлично работает, имеет очень похожий базовый вызов инициализации к прежней библиотеке, обеспечивающий чрезвычайно простой переход, и на момент написания этого поста JQuery Mask Input регулярно поддерживается на GitHub.

Моя проблема заключалась в том, что маскировщик телефонного номера перемещал курсор обратно во вторую позицию при вводе 3 или 4 цифр. После этого курсор продолжал вести себя странно. Проблема была замечена при использовании jQuery Masked Input v1.4.1 (старая библиотека) в планшетах Android с использованием Chrome post major версии 51.

person plaidcorp    schedule 12.03.2018

Чтобы еще больше улучшить принятый ответ Тони Брасунаса, добавьте следующий фрагмент в jquery.maskedinput.js для точки номер 3, чтобы динамически увеличивать максимальную длину, чтобы она не мешала действию курсора.

Удалите атрибут maxlength ввода или задайте для него значение, которое не будет мешать действию курсора, например 20.

    defs = $.mask.definitions;
    tests = [];
    partialPosition = len = mask.length;
    firstNonMaskPos = null;

    //insert snippet below
    if (chrome && android) {
        console.log("chrome && android");
        var allAllowedRegExps = '';
        jQuery.each(defs, function (key, value) {
            allAllowedRegExps = allAllowedRegExps + key;
        });
        allAllowedRegExps = allAllowedRegExps.replace(/\[/g, '');
        allAllowedRegExps = allAllowedRegExps.replace(/\]/g, '');
        allAllowedRegExps = '[^' + allAllowedRegExps + ']';
        var re = new RegExp(allAllowedRegExps, "g");
        var actual = mask;
        var replacedVal = actual.replace(re, "");
        var actualValue = actual.length - replacedVal.length;
        if ($(this).attr('maxlength') !== undefined) {
            $(this).attr('maxlength', parseInt(this.attr('maxlength')) + parseInt(actualValue));
        }
   }

    mask = String(mask);
person Arham Ranjha    schedule 29.01.2020

Это может быть быстрое решение:

var ua = navigator.userAgent;
var isAndroid = /Android/i.test(ua);
var isChrome = /Chrome/i.test(ua);

// Fix masking on Chrome for mobile devices
if (isAndroid && isChrome) {
    $('.price_input').attr('type','tel');
}     
person Himanshu Saini    schedule 12.10.2020