首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CLEditor -如果达到最大长度,则失去焦点

CLEditor -如果达到最大长度,则失去焦点
EN

Stack Overflow用户
提问于 2011-09-07 16:14:36
回答 2查看 2.5K关注 0票数 1

我正在尝试为CLEditor重新创建一个最大长度函数。这样做的目的是:如果一个文本被输入到一个文本框中,并且它的长度超过了设定的最大长度,那么这个文本框就会失去它的焦点,这样就不可能再写任何字母了。

到目前为止,我所实现的是,当文本长度超过我的最大长度时,CLEditor能够识别。对于失去焦点,我尝试了一个简单的返回(即return;return false;)和一些.blur()-methods (即$(frameDesc).blur();和cledDesc.$area.blur();)。但这些都不起作用。即使达到了最大长度,我仍然可以填充文本。

请看一下代码:

代码语言:javascript
复制
$("#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
   }
});

如有任何帮助和提示,我们将不胜感激:)

EN

回答 2

Stack Overflow用户

发布于 2011-09-08 14:24:00

解决了这个问题。这是相当棘手的。解决方案(对我来说)是:

使用keydown而不是keypress - event。

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

下面是代码现在的样子:

代码语言:javascript
复制
$("#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
EN

Stack Overflow用户

发布于 2011-10-19 15:37:07

我已经添加了一些代码来使其工作。

  1. 在检查文本长度之前,我甚至捕捉到了"canc“键(和其他键)
  2. 我更新了文本区域,它看起来像是CLEditor有一个内部缓存,并且我在删除和重新输入文本后有一个奇怪的行为。

这对我来说是完美的:

代码语言:javascript
复制
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;
    }
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7330740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档