Применение атрибута maxlength в мобильных браузерах

У меня есть ввод текста с максимальной длиной:

<input type="text" name="name" maxlength="50">

Это отлично работает во всех настольных браузерах, которые я пробовал, но максимальная длина, похоже, не применяется в мобильных браузерах.

Есть ли способ заставить мобильные браузеры применять maxlength? Я открыт для использования JavaScript и/или jQuery в решении.


person mdurchholz    schedule 03.07.2013    source источник
comment
Сильно подозреваю, что тут что-то другое. Используете ли вы какие-либо библиотеки или фреймворки, чтобы превратить вашу разметку во что-то другое для мобильных браузеров, например jQuery Mobile?   -  person Matt Ball    schedule 03.07.2013
comment
Я согласен с тем, что сказал @MattBall. Вероятно, скрипт конфликтует или выдает ошибки. Видите ли вы какие-либо ошибки js?   -  person jedmao    schedule 03.07.2013
comment
Вы можете использовать mimo84.github.io/bootstrap-maxlength, который выглядит как параметр validate для браузеров, не поддерживающих атрибут maxLength, включая мобильные.   -  person Mimo    schedule 03.07.2013
comment
У меня есть только обычная библиотека jQuery. Я даже проверил это на странице w3schools о maxlength. по крайней мере на моем телефоне не работает   -  person mdurchholz    schedule 17.07.2013


Ответы (6)


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

var $input = $('input')
$input.keyup(function(e) {
    var max = 5;
    if ($input.val().length > max) {
        $input.val($input.val().substr(0, max));
    }
});

jsFiddle здесь: http://jsfiddle.net/fttk2/1/

person Community    schedule 03.07.2013
comment
Можно ли отключить нажатие клавиши после достижения максимума 5? - person Dinesh Kumar; 05.01.2015
comment
@DineshKumar Один из других ответов отключает нажатия клавиш после достижения максимума. Однако делать это не рекомендуется, поскольку в этом случае пользователь не сможет нажать клавишу Backspace. - person mattsoave; 12.12.2016

Я бы предложил что-то более простое. Вышеупомянутое не сработало для меня, если только не было добавлено место для поля, чтобы его можно было подобрать ... или если я нажму «Отправить» сразу после этого, оно все равно передаст информацию.

if($(".input") > 20){$(".input") = input.slice(0,20)};
person COMPUTER KICK    schedule 04.12.2016

Универсальный способ jQuery для обеспечения соблюдения указанного maxlength поля формы. (Мне это было нужно для переопределений sessionStorage, localStorage и param.) Код оптимизирован для удобства чтения.

$('input').on('change', function () {
  var max = $(this).attr('maxlength'),
      val = $(this).val(),
      trimmed;

  if (max && val) {
    trimmed = val.substr(0, max);
    $(this).val(trimmed);
  }
});
person doublejosh    schedule 13.12.2017

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

person Vajiheh habibi    schedule 28.09.2020
comment
Конечно, но вы не можете предположить, что у каждого пользователя это будет отключено. Вы должны иметь возможность учитывать все случаи. - person mdurchholz; 28.09.2020
comment
@mdurchholz Конечно, я просто хотел, чтобы друзья знали, почему это произошло, может быть, это поможет лучшему поиску найти окончательный ответ, у меня сегодня тоже была эта проблема, но я не нашел на нее хорошего ответа. - person Vajiheh habibi; 28.09.2020

person    schedule
comment
Хотя этот фрагмент кода может решить вопрос, включение объяснения действительно помогает улучшить качество вашего поста. Помните, что вы отвечаете на вопрос для будущих читателей, и эти люди могут не знать причин вашего предложения кода. Также старайтесь не перегружать свой код пояснительными комментариями, это снижает читабельность как кода, так и пояснений! - person Martin Tournoij; 14.05.2017

person    schedule
comment
Кажется, нельзя нажать клавишу Backspace после достижения максимальной длины. - person Trevor; 24.10.2013