文本区 | val().length 不计算 chrome 中的“输入/换行符”

Posted

技术标签:

【中文标题】文本区 | val().length 不计算 chrome 中的“输入/换行符”【英文标题】:Textarea | val().length not counting "Enter/Line Breaks" in chrome 【发布时间】:2016-06-30 11:33:14 【问题描述】:

我有一个textarea与属性maxlength设置为350&它工作得很好,它也计数输入/换行作为一个字符。 P>

我还可以选择显示一个错误消息,如果用户尝试于或达到键入更多到350字符的限制针对我使用这个代码:

$("textarea").keyup(function (e) 
    if($(this).val().length >=350)
        $('.error').show();
    else
        $('.error').hide();
    
);

它的工作原理,但在Chrome并不指望输入/换行符,但最大长度不作为的结果,如果用户在多行文本断,他做后350字符停止打字,但没有看到任何消息。

下面是一起玩一个小提琴:https://jsfiddle.net/udp9oxx4/ P>

请注意此错误只发生在铬。 P>

【问题讨论】:

是它是示出了MSG超过350 charecters在铬跨度> 我只是通过这一个燃烧。正如你所说,textarea的值不包括CR / LF类。我有一些代码,通过客户端验证,但它无法在服务器上,因为该值有更多的字符超过允许的。 SPAN> 【参考方案1】:
$("textarea").keyup(function (e) 

var isChrome = window.chrome;
if(isChrome)
var value = $(this).val().replace(/(\r\n|\n|\r)/g,"  ");

else
var value = $(this).val();


        if(value.length >=350)
            $('.error').show();
        else
            $('.error').hide();
        
    );

Chrome 将换行符计为 2 个字符,因此它会错误地计算字符数。只需将这段代码添加到函数前面,它就可以正常工作了。

https://jsfiddle.net/3wpqd4nr/

小提琴

【讨论】:

谢谢,我刚刚在 mac safari 上测试了我的小提琴,bug 也在那里,应该为window.safari 添加一个条件,我想它必须用 chrome 和 safari javascript 做一些事情引擎。 我现在有点忙,但是我们得看看这是不是js引擎的问题,如果是的话,应该是基于js引擎的情况。 这个答案不再有效

以上是关于文本区 | val().length 不计算 chrome 中的“输入/换行符”的主要内容,如果未能解决你的问题,请参考以下文章

java文本区如何设置十个数字一换行

jquery - 计算文本区域中的字符[重复]

使用 Javascript (jQuery) 遍历所有文本区域

如何在javascript中检索文本区域的值

通过名称属性获取文本区域

带有jquery的html文本区域