IE8中的javascript-maxLength

IE8中的javascript-maxLength,javascript,internet-explorer-8,textarea,maxlength,Javascript,Internet Explorer 8,Textarea,Maxlength,使用javascript函数防止超过文本字段的长度,但仍允许在其中粘贴和编辑。需要在IE8和Firefox中工作 $(function() { var helper = document.createElement('textarea'); //if (!('maxLength' in helper)) { var supportsInput = 'oninput' in helper, ev = supportsInput ? 'inpu

使用javascript函数防止超过文本字段的长度,但仍允许在其中粘贴和编辑。需要在IE8和Firefox中工作

$(function() {
    var helper = document.createElement('textarea');
    //if (!('maxLength' in helper)) {
        var supportsInput = 'oninput' in helper,
            ev = supportsInput ? 'input' : 'propertychange paste keyup',
            handler = function() {
                var maxlength = +$(this).attr('maxlength');
                if (this.value.length > maxlength) {
                    this.value = this.value.substring(0, maxlength);
                }
            };

        $('textarea[maxlength]').on(ev, supportsInput ? handler : function() {
            var that = this;
            setTimeout(function() {
                handler.call(that);
            }, 0);
        });
    //}

});
如果文本在maxLength=25的单行测试中,则可以正常工作。然而,它不做回车和换行,也不正确地解释它们

例如,如果我在一行中输入以下文本:

1111122222333334444455555
它使用全部25个字符

但是,如果我在每行输入文本并按enter键,则我可以输入以下内容:

11111
22222
33333
4444
只有22个字符。我知道它正在检测回车,因为当我输入: 11111

字符计数器显示5。当我按下回车键时,计数器变为6,如果我输入22222,计数器现在是11

我用来计算字符数的代码是:

$("#myTextArea").keyup(function() {
        var j = $(this).val().length;
        var i = 25 - j;
        $("#charsUsed").text( j );
        $("#charsLeft").text( i );
        });

我想问题可能是我输入了一些代码来自动调整文本区域的大小,但事实并非如此。我确信我只是在代码上遗漏了一些东西&如果您能告诉我我做错了什么,我将不胜感激&我似乎还没有弄明白

我自己偶然发现了答案。事实证明,我使用的字符计数器没有准确地计算字符中的换行符

虽然我使用的是IE8,但我在一个问题中找到了答案,这个问题是关于Chrome在带有maxLength属性的textarea中错误地计算字符。这个问题很重要

我以前使用的代码:

$("#myTextArea").keyup(function() {
        var j = $(this).val().length;
        var i = 25 - j;
        $("#charsUsed").text( j );
        $("#charsLeft").text( i );
        });
已修改为:

$("#myTextArea").keyup(function() {
    var x = $("#myTextArea").val();
    var newLines = x.match(/(\r\n|\n|\r)/g);
    var addition = 0;
    if (newLines != null) {
       addition = newLines.length;
       }
    var j = x.length + addition;
    var i = 25 - j;
    $("#charsUsed").text( j );
    $("#charsLeft").text( i );
    });
嵌入的新行必须作为CR LF对传输-实际上是2个字符。感谢海报中的帮助