限制tinyMCE中的字数

时间:2015-02-04 18:07:06

标签: javascript tinymce

我在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限制。

编辑修改了代码和问题,因为我已经对解决方案做了一些部分进展。

1 个答案:

答案 0 :(得分:0)

我想我解决了。我发现Firefox不喜欢“keycode”,我在Firefox中测试。我现在已将行改为

if (words >= maxwords && e.which != 8 && e.which != 46 && e.keycode != 8 && e.keycode != 46) {

现在,当达到最大字数时,textarea会被冻结,但删除和退格按钮可用于将字数减少到最大值以下。

我仍然希望在页面可见时显示警告消息,而不是在用户开始输入时显示,但也许这是另一天的任务。