1

使用 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 个字符。

但是,如果我在每一行输入文本并按回车,这就是我能够输入的内容:

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 的大小,但事实并非如此。我确定我只是在代码上遗漏了一些东西,希望能就我做错的事情提供意见,而且似乎还没有弄清楚。

4

1 回答 1

0

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

虽然我使用的是 IE8,但我在一个关于 Chrome 在 textarea 中使用 maxLength 属性计数字符错误的问题中找到了答案。这个问题就在这里

我之前使用的代码:

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

于 2013-09-10T15:44:28.557 回答