2011-09-07 42 views
1

我正在尝试为CLEditor重新创建maxlength - 函数。其目标是: 如果文本输入到文本框中并且其长度超过了设置的最大长度,则文本框应该失去焦点,因此无法写入任何其他字母。CLEditor - 如果达到最大长度,则失去焦点

我到目前为止所取得的成就是,CLEditor能够识别文本何时比我的最大长度更长。 ();和一些.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 
    } 
}); 

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

+0

你尝试给.focus()到另一个元件像提交按钮? – Shameer

+0

这是个好主意。我刚刚尝试过,它失去了重点。但我仍然可以写一些文字。 – Kritzli

+0

不应该发生反正..如果你能写更多的文字文字的长度将再次更大,应该重点... :) – Shameer

回答

1

解决了这一之一。这非常棘手。解决方案(对我来说)是:

使用keydown而不是keypress - event。

所以,如果我想在我的文本框中放入一些文本并且达到了maxlength,我就不能继续写下去了。但为了能够删除一些文本,我需要除Backspace-key之外的其他内容。所以我已经进行了检查,如果按下的键是退格键。

这是代码看起来像现在:

$("#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 
    } 
}); 
1

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

  1. 我赶上连“CANC”键(等)
  2. 检查前我更新textarea的文本的长度,它看起来像CLEditor有一个内部缓存和I删除后有一个奇怪的行为,重新输入文字。

这是工作完美的我:

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; 
    } 
}); 
+0

完美的作品,谢谢! –

+0

我发布了一个新的问题基于这个:http://stackoverflow.com/questions/8386385/cleditor-maxlength-calculation-after-toolbar-click –

+0

这个问题是,如果文本格式化,它失去了它的格式在val(text.substr(...))中设置值时,因为子字符串将删除部分格式标记。 – Neets