0

JSFiddle:http: //jsfiddle.net/qPvch/56/

字数限制功能似乎运作良好。但是,当我输入最大单词数(演示中为 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:

<textarea name="what" id="what" rows="1"></textarea>
<div class="word_count">
Word count: <span></span>
</div> 
4

1 回答 1

2

该问题“功能”是由此代码引起的(我更改为停止它):

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;
}

FIDDLE - 请注意,这个小提琴在代码的顶部也有一些变化。

于 2013-08-02T17:13:25.107 回答