1

我正在尝试为 CLEditor 重新创建一个 maxlength 函数。目标是:如果将文本输入到文本框中并且其长度超过设置的最大长度,则文本框应该失去焦点,这样就不可能再写任何字母。

到目前为止,我所取得的成就是 CLEditor 可以识别文本何时超过我的最大长度。为了失去焦点,我尝试了一个简单的返回(即 return; return false;)和一些 .blur() 方法(即 $(frameDesc).blur(); 和 cledDesc.$area.blur();)。但这些都行不通。即使达到最大长度,我仍然可以填写文本。

请看一下代码:

$("#profileForm_description").cleditor({width: 430, height: 125});

var cledDesc = $("#profileForm_description").cleditor()[0];
var frameDesc =  cledDesc.$frame[0].contentWindow.document;

$(frameDesc).bind('keypress change', function(){

   var text = textWithoutHTML(cledDesc.$area.val());

   if(text.length >= 650){
      console.log("Longer than MaxLength");
      //lose focus

   }else{
      //Do something
   }
});

任何帮助和提示将不胜感激:)

4

2 回答 2

1

我添加了一些代码以使其工作。

  1. 我什至抓住了“canc”键(和其他键)
  2. 在检查文本长度之前,我更新了 textarea,看起来 CLEditor 有一个内部缓存,并且在删除并重新输入文本后我有一个奇怪的行为。

这对我来说非常有用:

var cledDesc = $("#oodsummary").cleditor()[0];
var frameDesc =  cledDesc.$frame[0].contentWindow.document;
var limit = 10;
$(frameDesc).bind('keydown', function(event){
    cledDesc.updateTextArea();

    var text = cledDesc.$area.val();

    if(text.length >= limit &&
        event.which != 8 && // back
        event.which != 46 && // canc
        event.which != 37 && // left
        event.which != 38 && // up
        event.which != 39 && // right
        event.which != 16 && // shift
        event.which != 20 && // caps lock
        event.which != 91 && // os special
        event.which != 18 // alt
        ) {
        alert("Il testo inserito risulta essere troppo lungo.");
        cledDesc.$area.val(text.substr(0, limit)).blur(); 
        return false;
    }else{
        cledDesc.updateTextArea();
        return true;
    }
});
于 2011-10-19T07:37:07.240 回答
1

解决了这个。那很棘手。解决方案(对我来说)是:

使用 keydown 而不是 keypress - 事件。

因此,如果我试图在我的文本框中输入一些文本并且达到最大长度,我将无法继续写作。但是为了能够删除一些文本,我也需要排除 Backspace 键被拒绝。所以我检查了一下,如果按下的键是退格键。

这就是代码现在的样子:

$("#profileForm_description").cleditor({width: 430, height: 125});

var cledDesc = $("#profileForm_description").cleditor()[0];
var frameDesc =  cledDesc.$frame[0].contentWindow.document;

$(frameDesc).bind('keydown change', function(event){

   var text = textWithoutHTML(cledDesc.$area.val());

   if(text.length >= 650 && event.which != 8){
      console.log("Longer than MaxLength");
      //lose focus / stop writing
      return false;
   }else{
      //Do something
   }
});
于 2011-09-08T06:24:00.280 回答