我在textarea上使用tinyMCE。为了限制可以输入的单词数,我在页面中有这个脚本。
tinyMCE.init({
mode : "exact",
elements : "description",
theme : "advanced",
plugins : "paste,wordcount",
theme_advanced_buttons1 : "bold,italic,underline,|,sub,sup,|,cut,copy,pastetext,|,undo,redo,|,code",
theme_advanced_buttons2 : "",
theme_advanced_buttons3 : "",
theme_advanced_toolbar_location : "top",
theme_advanced_toolbar_align : "left",
force_p_newlines : false,
valid_elements : "p,br,b,u,sub,sup,strong,em,hr",
theme_advanced_statusbar_location : "bottom",
//Word counter
theme_advanced_path : false,
setup : function(ed) {
ed.onKeyUp.add(function(ed, e) {
var strip = (tinyMCE.activeEditor.getContent()).replace(/(<([^>]+)>)/ig,"");
var words = strip.split(' ').length;
if (words < maxwords) {
var text = "You have used " + words + " words, " + (maxwords - words) + " remaining"
}else if (words == maxwords){
var text = "<span style='color:red'>You have reached your full word allocation</span>"
}else if (words > maxwords){
var text = "<span style='color:red;font-weight:bold'>You have exceeded your word allocation.</span>"
}
tinymce.DOM.setHTML(tinymce.DOM.get(tinyMCE.activeEditor.id + '_path_row'), text);
if (words >= maxwords) {
e.preventDefault();
e.stopPropagation();
return false;
}
});
}
});
这非常巧妙地在文本区域下方发出警告消息,并停止用户提交的表单超过允许的单词。
然而,一旦超过字数,一切都被锁定。我的目标是使其适用于删除和退格按钮,以便用户可以轻松纠正多余的字数。我已经尝试了各种各样的事情
if (words >= maxwords && e.keycode != 8) {
但似乎没有任何效果。当然,我在这里是正确的路线。我错过了一些明显的东西吗?
顺便提一下&#34; maxwords&#34;在另一个地方定义,并且对可以提交到数据库的单词数量也有PHP限制。
编辑修改了代码和问题,因为我已经对解决方案做了一些部分进展。
答案 0 :(得分:0)
我想我解决了。我发现Firefox不喜欢“keycode”,我在Firefox中测试。我现在已将行改为
if (words >= maxwords && e.which != 8 && e.which != 46 && e.keycode != 8 && e.keycode != 46) {
现在,当达到最大字数时,textarea会被冻结,但删除和退格按钮可用于将字数减少到最大值以下。
我仍然希望在页面可见时显示警告消息,而不是在用户开始输入时显示,但也许这是另一天的任务。