Атрибут maxlength ввода в html не работает на HTC One M7

У меня есть простое поле ввода с атрибутом maxlength="2". Код выглядит следующим образом:

<input id="txtLoginName" maxlength="2">

Он отлично работает на большинстве устройств Android. Однако на HTC One M7 это не работает. На этом устройстве он просто позволяет мне вводить столько символов, сколько я хочу.

Любое предложение? Я думаю, что пока это должно быть проблемой конкретного устройства.

Заранее спасибо.


person Long Dao    schedule 27.06.2014    source источник


Ответы (4)


Попробуй это:

var $input = $('input')
$input.keyup(function(e) {
    var max = 5;
    if ($input.val().length > max) {
        $input.val($input.val().substr(0, max));
    }
});
person Kevin Sebastian Fernandez    schedule 07.10.2015
comment
так просто и так полезно! В Android все другие предложения с «возвратом false» для значения › maxlength не работают, это работает отлично! Спасибо! - person Simona Adriani; 04.02.2016
comment
То же самое. Другой ответ не работал на Android Cordova (хотя это слова в браузере Chrome на рабочем столе). Но этот отлично работает даже с включенным автозаполнением, автозаменой. - person Hawk; 04.08.2016
comment
Это не работает в моем проекте Android Cordova, есть ли обходной путь? - person S_S; 23.03.2017

Что я нашел по этой теме:

Проблема связана не только с Android, но и с клавиатурами Android. maxlength работает на клавиатуре Google. maxlength не работает на клавиатуре Samsung. => см. https://github.com/ionic-team/ionic/issues/11578#issuecomment-323403990

и что еще более важно - это не баг, это фича:

person Miro Grenda    schedule 17.05.2019

Я заметил эту проблему в нескольких проектах. Я думаю, что некоторые версии Android плохо поддерживают maxlength.

Мое решение состояло в том, чтобы использовать функцию нажатия клавиши jQuery, которая проверяет количество символов и предотвращает ввод, если было достигнуто максимальное значение.

$('#inputWithMaxLength').keydown(function (e) {

    var inputLength = jQuery(this).val().length;

    if(inputLength >= 10) {
        e.preventDefault();
        return false;
    }
}

Я уверен, что вы могли бы изменить это так, чтобы он искал любой ввод с атрибутами maxlength и создавал резервную копию jQuery на лету. Я не уверен, что это будет довольно медленно.

person Adam Hughes    schedule 16.07.2014
comment
Да, я знаю, что jQuery может помочь с этой проблемой. Однако я столкнулся с другой проблемой: например, я ввожу символ, скажем, f, подсказка предложит некоторые слова, такие как друг, огонь, фильм и т. д. Если я выберу предложенное слово, текстовое поле позволит более 2 символов и с этого момента я все еще могу ввести какой-либо символ. - person Long Dao; 23.07.2014
comment
Вы можете ввести или сформировать атрибут autocomplete=off, так как это мобильный браузер и, вероятно, работает с html5. - person Adam Hughes; 23.07.2014
comment
Я уже пробовал, но ни одно из автозаполнения, автозаполнения и т. д. не работает с предсказанием Android. - person Long Dao; 24.07.2014
comment
Вы пробовали все это? autocomplete=off autocorrect=off autocapitalize=off проверка орфографии=false - person Adam Hughes; 24.07.2014
comment
да я уже сделал. К сожалению, ни один из них не работает. Я думаю, что нет никакого способа поймать событие, когда нажимается слово предсказания. Кажется, что это неразрешимая проблема atm. - person Long Dao; 25.07.2014

Чтобы предотвратить это, вы должны использовать (гибрид Js-Jquery)

$("body").unbind("keyup").on("keyup","input[maxlength],textarea[maxlength]", function(event) {
    this.value=  this.value.substr(0, this.getAttribute("maxlength"));
    this.onkeyup && this.onkeyup();
});

Onkeyup возникает из-за того, что у вас может быть встроенный onkeyup, который также следует вызывать после запуска этого кода (например, для обновления счетчика символов).

person Miguel    schedule 09.12.2019