Максимальная длина текстовой области в IE - PullRequest
3 голосов
/ 19 января 2012

Можно ли из данного события keydown сказать, будет ли уменьшаться или увеличиваться длина владельца input[type=text] или textarea после его применения?

Справочная информация: есть сайт HTML5 (<!DOCTYPE html>), который должен поддерживать пользователей IE 8 и 9 в качестве основного потребителя.На некоторых страницах у меня есть <textarea> элементы с maxlength="100" атрибутами.IE не распознает атрибут maxlength и позволяет вводить в textarea.

более 100 символов. Я не видел прокладки, которая ограничивает длину символа textarea в IE стакое же поведение клавиатуры, как и у элемента input[type=text].

По этой причине я пытаюсь написать один.

Существующие реализации выглядят примерно так:

$('textarea[maxlength]').on('keydown keyup blur', function(e) {
    var $this = $(this),
        maxlen = $this.attr('maxlength'),
        val = $this.val();

    if (val.length > maxlen) {
        $this.val(val.substr(0, maxlen));
    }
});

Проблема с над реализацией заключается в том, что вы можете ввести или вставить 11 символов, и значение не обрезается до максимальной длины до тех пор, пока значение не будет изменено.Я хотел бы предотвратить изменение до изменения значения, чтобы лучше соответствовать поведению input[type=text,maxlength].

Ответы [ 2 ]

1 голос
/ 19 января 2012

Вы уже слушаете события keydown и keyup - к сожалению, вы ничего не можете сделать. события нажатия клавиш могут добавить что-то большее, но я думаю, что они запускаются вместе с keyup, так что, вероятно, нет.

Одна проблема с приведенным выше кодом заключается в том, что если вы щелкнете правой кнопкой мыши и вставите (или сделаете это через меню редактирования), то это не поможет.

Один из возможных обходных путей - использовать CSS, чтобы скрыть текстовую область за кадром, а затем поместить другую «ложную» текстовую область, которая имитирует ее. Когда пользователь печатает, включите его действие за пределами экрана, а затем скопируйте то, что вы хотите, в «ложное» на экране. На практике я не уверен, как это будет работать с такими экземплярами, как ситуация с правой кнопкой мыши> вставка - это может занять много времени.

0 голосов
/ 09 июня 2017

Ваша проблема в том, что ваш интернет-обозреватель даже не помещает значение maxlength в html, попробуйте, например, жестко его кодировать в javaScript;

 $(document).on('input keyup', 'textarea', function(e) {
        // maxlength attribute does not in IE prior to IE10
        // http://stackoverflow.com/q/4717168/740639
        console.debug("here")
        var $this = $(this);
        var maxlength = 255;
        if (!!maxlength) {
            var text = $this.val();

            if (text.length > maxlength) {
                // truncate excess text (in the case of a paste)
                $this.val(text.substring(0,maxlength));
                e.preventDefault();
            }

        }

    });
...