Hi有没有一种方法可以限制textarea中的单词,该方法具有与maxlength相同的功能,使用jquery或coffeescript并使用keyup函数,因为我需要显示一个准确的计数器。我到处找,但找不到办法。我试过这个,但它是在按键上,它允许用户粘贴250多个单词。
$(document).on "keypress", '#company_desc', (e) ->
s = $("#company_desc").val()
s = s.replace(/(^s*)|(s*$)/g, "")
s = s.replace(/[ ]{2,}/g, " ")
s = s.replace(/n /, "n")
count = s.split(" ").length
$(".counter").html(250 - count + " words remaining")
if count == 250
key = (if e.charCode then e.charCode else (if e.keyCode then e.keyCode else 0))
switch key
when e.ctrlKey && key == keys[CTRL_A] then return true
when e.ctrlKey && key == keys[CTRL_C] then return true
when e.ctrlKey && key == keys[CTRL_X] then return true
when e.ctrlKey && key == keys[CTRL_Z] then return true
else return key == 46 || key == 8
您的文本区域添加attr"maxlength"
试试这个。
$("your textarea id and class").attr("maxlength", 250);
var maxWords = 150;
jQuery('textarea').keypress(function() {
var $this, wordcount;
$this = $(this);
wordcount = $this.val().split(/b[s,.-:;]*/).length;
if (wordcount > maxWords) {
jQuery(".word_count span").text("" + maxWords);
alert("You've reached the maximum allowed words.");
return false;
} else {
return jQuery(".word_count span").text(wordcount);
}
});
小提琴手:http://jsfiddle.net/qPvch/164/
所以我想到了这个。
var maxWords = 250;
jQuery('textarea').keyup(function() {
var a, wordcount;
a = $(this).val();
a = a.replace(/(^s*)|(s*$)/g, "");
a = a.replace(/[ ]{2,}/g, " ");
a = a.replace(/n /, "n");
wordcount = a.split(" ").length;
if (wordcount == maxWords) {
$(this).val(a.substr(0, a.length));
}
if (wordcount > maxWords) {
$(this).val(a.substr(0, a.length - 1));
}
return jQuery(".word_count span").text(maxWords - wordcount + " words remaining");
});
$('textarea').bind("paste",function(e) {
e.preventDefault();
});
我使用.substr(0, a.length -1)
来剪切单词并迫使用户保持在maxWords内,我还禁用了在文本区域内粘贴(这也禁用了右键粘贴),但我认为这不是最好的方法,如果用户仍然可以使用粘贴,并在粘贴后自动剪切多余的单词,或者像maxlength
那样在用户已经达到最大单词时禁用它。有什么建议吗?这是我的小提琴-JSFiddle