2012-10-25 117 views
0

我做了一個搜索,但無法找到它。我們有一個maxChars =「3900」的Spark TextArea。但複製/粘貼到文本區域時不起作用。我試圖將此添加到ChangingHandler中:複製/粘貼時,Flex spark TextArea限制最大字符數

if (ta.text.length > 3900) 
     { 
         Alert.show("The maximum characters length is 3900. Please limit the characters to the max limit"); 
         ta.text = ta.text.substr(0, 3900); 
        } else 
        { 
         if (event.operation is PasteOperation) 
         { 
....//Other logic 
         } 
     } 

問題是它不是一直都在工作。該警報僅在超過3900個字符時出現。不知道爲什麼。我也將同樣的內容添加到changeHandler中。但那根本不會被觸發。

請讓我知道我錯過了什麼。我需要顯示一個警告&修剪字符到最大值,每次超過最大限制。

感謝

哈里什

+0

它不工作怎麼樣?你是否收到錯誤?或意外的行爲?請提供詳情。 – JeffryHouser

+0

我有一個文字計數爲1600的單詞文檔。我複製/粘貼了3次,但沒有觸發警報。然後,當我試圖複製textArea中的文本時,它決定顯示警報並修剪文本!奇怪的! – Harry

+1

我現在還不清楚問題在哪裏。聽起來事情正如你所期望的那樣工作? – JeffryHouser

回答

2

首先,我們需要明確一點:不斷變化的處理程序被觸發時,這意味着:文本正在發生變化,但變化尚未申請。

如果textare中的文本是「」(空),現在我粘貼1600個字符,更改的處理程序被調用,文本的長度仍然爲0,因爲它正在更改,而不是更改。

所以現在,如果你有一個變化處理程序,當您跟蹤的長度,它應該是1600

但是,如果使用「event.preventDefault();」在你改變的方法中,並且不需要改變改變處理器中的文本,你的改變處理器不應該被觸發。

所以,我的建議是:

  1. 使用改變處理是正確的。
  2. 在處理程序中,獲取剪貼板中的文本,然後您可以獲取剪貼板中文本的長度,使用此長度+ textArea.text.length,如果處理粘貼,您將獲得長度。 如果總長度大於你的限制,你可以防止事件發生,並做你想做的事情。

這裏是給你一些代碼:

protected function textArea_changingHandler(event:TextOperationEvent):void 
     { 
      trace(event.type + " - " + textArea.text.length); // this length is befor the paste 

      if(event.operation is PasteOperation) { 
       // Text in the clipboard. 
       var textPaste:String = Clipboard.generalClipboard.getData(ClipboardFormats.TEXT_FORMAT) == null ? "" : Clipboard.generalClipboard.getData(ClipboardFormats.TEXT_FORMAT) as String; 
       // this length is after the paste(if the paste will complete) 
       var totalLength:int = textArea.text.length + textPaste.length; 
       trace("String length after Paste: " + totalLength); 

       if(totalLength > 3900) { 
        event.preventDefault(); 
        textArea.text += "[Paste:" + textPaste.substr(0, 2) + "]"; // process your text here. 
       } 
      } 
     } 
+0

太棒了!謝謝 – Harry