2

我研究了各种 JQuery 插件来限制用户可以在文本区域键入的字符数,但我还没有真正找到一个忽略空格的插件。我尝试使用限制器修改现有的字符计数器,$('textarea').val().replace(/ /g,'').length它确实有效。但是,当代码达到限制时,我希望用户无法在文本区域输入更多内容。但是,它实际上并不是这样工作的。

这是插件的代码:

(function ($) {
$.fn.extend({
    limiter: function (limit, elem) {
        $(this).on("keyup focus", function () {
            setCount(this, elem);
        });

        function setCount(src, elem) {
            var chars = src.value.replace(/ /g,'').length;
            if (chars > limit) {
                src.value = src.value.substr(0, limit);
                chars = limit;
            }
            elem.html(limit - chars);
        }
        setCount($(this)[0], elem);
    }
});
})(jQuery);

我认为问题在于,src.value = src.value.substr(0, limit); 因为限制变量仍会将空格计为字符。作为 JQuery 的初学者,我不确定如何处理这个问题。

任何帮助将不胜感激。提前致谢!

这是我迄今为止所拥有的一个小提琴:http: //jsfiddle.net/dxUsK/1/

这是原始插件的链接:http ://www.scriptiny.com/2012/09/jquery-input-textarea-limiter/

4

1 回答 1

2

问题在于您的正则表达式正在从字符串中删除空格字符,然后当您设置源值时,您已经删除了所有空格字符。一个简单的解决方法是计算空格的数量,然后将其包含在字符串长度中。

// Count the number of space characters.
var spaces = src.value.split(' ').length - 1; // remove 1 for index 0 later
if (chars > limit) {
    src.value = src.value.substr(0, limit + spaces); // Don't forget the spaces here!

还有其他一些方法可以做到这一点,但这是一个普遍的想法。

于 2013-10-20T20:31:48.903 回答