javascript - IE8中的maxLength

时间:2013-09-09 19:06:58

标签: javascript internet-explorer-8 textarea maxlength

使用javascript函数来防止超出文本字段的长度,但仍然允许粘贴&在其中编辑。需要在IE8和IE中工作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个字符。

但是,如果我在每行输入文字&点击进入,这是我能够输入的内容:

11111
22222
33333
4444

只有22个字符。我知道它正在检测回车,因为我放入时: 11111

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

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

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

我认为问题可能是我自动调整TextArea大小的一些代码,但事实并非如此。我确信我只是遗漏了代码中的一些内容。我会很感激我对错误的看法。似乎还没弄明白。

1 个答案:

答案 0 :(得分:0)

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

虽然我使用的是IE8,但我在使用maxLength属性的textarea中对Chrome计数字符错误的问题中找到答案。那个问题是here

我之前使用的代码:

$("#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个字符。感谢other thread中的海报帮助他们。