2011-09-07 53 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