Javascript 正在限制文本区域中的字数。。。但是当我输入最大字数时,突然输入的文本被转换成一个巨大的字符串

Javascript 正在限制文本区域中的字数。。。但是当我输入最大字数时,突然输入的文本被转换成一个巨大的字符串,javascript,jquery,count,word,limit,Javascript,Jquery,Count,Word,Limit,JSFiddle: 字数限制功能似乎运行良好。然而,当我输入max#of words(在演示中为5个),然后在文本区域外单击时,文本框内的单词突然变成一个巨大的字符串(没有空格!) Javascript: var maxWords = 5; jQuery('textarea#what').keypress(function() { var $this, wordcount; $this = $(this); wordcount = $this.val().split(/\b[\s,\.-

JSFiddle:

字数限制功能似乎运行良好。然而,当我输入max#of words(在演示中为5个),然后在文本区域外单击时,文本框内的单词突然变成一个巨大的字符串(没有空格!)

Javascript:

    var maxWords = 5;
jQuery('textarea#what').keypress(function() {
var $this, wordcount;
$this = $(this);
wordcount = $this.val().split(/\b[\s,\.-:;]*/).length;
if (wordcount > maxWords) {
    jQuery(".word_count span").text("" + maxWords);
    return false;
  } else {
    return jQuery(".word_count span").text(wordcount);
}
});

jQuery('textarea#what').change(function() {
var words = $(this).val().split(/\b[\s,\.-:;]*/);
if (words.length > maxWords) {
    words.splice(maxWords);
    $(this).val(words.join(""));
}
});
HTML:


字数:
该问题“功能”是由该代码引起的(我将其更改为停止该代码):

但是这个简单的改变(在单词之间留出一个空格)并不是你真正想要的

你需要一些东西来去掉原始字符串中的一些单词。像这样的事情会有大概的结果:

if (words.length > maxWords) {
    var content = $(this).val();
    content = trimNonWords(content);
    for (var i = maxWords ; i < words.length ; ++i) {
        content = content.substring(0, content.length-words[i].length);
        content = trimNonWords(content);
    }
    $(this).val(content);
}

function trimNonWords(str) {
    ... remove any chars in the 'split' for getting word count from the end
    return result;
}
if(words.length>maxWords){
var content=$(this.val();
content=trimNonWords(content);
for(var i=maxWords;i

-请注意,此提琴也有一些更改,这些更改位于代码的顶部。

我不得不做类似的事情,并提出了这个正则表达式:
var words=$(this.val().split(/\b[\s,\.-:;\(\)\'\“]*/);
jQuery('textarea#what').change(function() {
var words = $(this).val().split(/\b[\s,\.-:;]*/);
if (words.length > maxWords) {
    words.splice(maxWords);
    $(this).val(words.join(" "));
}
});
if (words.length > maxWords) {
    var content = $(this).val();
    content = trimNonWords(content);
    for (var i = maxWords ; i < words.length ; ++i) {
        content = content.substring(0, content.length-words[i].length);
        content = trimNonWords(content);
    }
    $(this).val(content);
}

function trimNonWords(str) {
    ... remove any chars in the 'split' for getting word count from the end
    return result;
}