Максимальная длина текстовой области не работает на IE8

Из исследований в Интернете, атрибут максимальной длины не работает на IE 8 и 9

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

//Dynamic append the textarea row
function do_resize(textArea) {
    while (
        textArea.rows > 1 &&
        textArea.scrollHeight < textArea.offsetHeight
    )
    {
        textArea.rows--;
    }
    while (textArea.scrollHeight > textArea.offsetHeight)
    {
        textArea.rows++;
    }
    textArea.rows++
}


<textarea name="q<%=countNo%>_ans" rows="3" cols="55" maxlength="2000" style="resize: none;" onkeyup="new do_resize(this);" onKeyPress="return ( this.value.length < 2000);"></textarea>

Проблема в том, что textarea не может ввести какой-либо символ после того, как он превысит 2000 в IE8 9, но я все еще могу использовать функцию копирования и вставки, которая превысит ограничение textarea. Как это исправить? Спасибо

4 ответа

Решение

Код в вопросе эффективно отключает ввод с клавиатуры при достижении предела. Чтобы наложить ограничение и на вставляемый контент, вам нужно обрабатывать и другие события. Следующий код усекает содержимое текстовой области до заданной длины. Это нехорошее удобство использования (вы, вероятно, должны сигнализировать о попытке превышения лимита вместо тихого усечения, и вы могли бы иметь счетчик символов на странице, чтобы помочь пользователю), но он делает то, о чем просили:

<textarea maxlength=2000
  onchange="testLength(this)"
  onkeyup="testLength(this)"
  onpaste="testLength(this)"
></textarea>
<script>
var maxLength = 2000;
function testLength(ta) {
  if(ta.value.length > maxLength) {
    ta.value = ta.value.substring(0, maxLength);
  }
}
</script>

Используйте этот код, он будет работать для версий ниже IE 9. изменить только версию, если условие.

if(navigator.appVersion.indexOf("MSIE .9")!=-1)
                                {
                                    $('#inputid').bind('keyup blur', function () {
                                        var $this = $(this);
                                        var len = $this.val().length;
                                        var maxlength = 3;
                                        if (maxlength && len > maxlength) {
                                            var inputvalue= $this.val().slice(0, maxlength);
                                            $this.val("");
                                            $this.val(inputvalue);
                                        }
                                    });
                                }

Для краткости: maxlength для textarea - это новая функция HTML5, которая впервые была поддержана IE в 10. IE 9 и ниже никогда не поддерживал ее.

Просто добавь onpaste исправил проблему

<textarea name="q<%=countNo%>_ans" rows="3" cols="55" maxlength="2000" style="resize: none;" onkeyup="new do_resize(this);" onKeyPress="return ( this.value.length < 2000); onpaste="return ( this.value.length < 2000);"></textarea>
Другие вопросы по тегам