1

CLEditor の maxlength 関数を再作成しようとしています。目的は次のとおりです。テキストがテキストボックスに入力され、設定された最大長よりも長い場合、テキストボックスはフォーカスを失い、それ以上文字を書くことができなくなります。

これまでに達成したことは、CLEditor がテキストが最大長を超えたときにそれを認識することです。フォーカスを失うために、単純なリターン (つまり、return; return false;) といくつかの .blur() メソッド (つまり、$(frameDesc).blur(); と cledDesc.$area.blur();) を試しました。しかし、それらは機能していません。maxlength に達してもテキストを入力できます。

コードを見てください:

$("#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. テキストエリアを更新するテキストの長さを確認する前に、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 に答える