2012-04-30 54 views
2

下面的代碼工作正常,但如果我粘貼的字符串超過10個字符,它應該只粘貼前10個字符。目前它不這樣做,我如何防止超過10個字符被粘貼?Textarea charCount - 防止用戶粘貼

http://jsfiddle.net/qfzkw/2/

+1

爲什麼downvote沒有提及任何理由?即使對某些人來說這是一個微不足道的問題,但它確實遵守了計算器的規則。 – gopi1410

+0

有些人喜歡這樣做..誰在乎 –

回答

1

只需使用 <textarea maxlength="10"></textarea>​

沒有必要爲這個JavaScript。它也會自動處理複製粘貼。

這裏是更新的jsFiddle

+0

你有沒有測試過它?我曾嘗試maxlength,我仍然可以粘貼更多,然後允許的字符...我測試了你修改的jsfiddle,但仍然是相同的 –

+0

@AbuHamzah是的,上面的jsFiddle工作正常,即使粘貼字符長度大於10。我剛剛檢查過它。 – gopi1410

+0

試試這個,複製超過10個字符的文字並粘貼 –

0

您無法從瀏覽器中瀏覽剪貼板緩衝區,所以您唯一的選擇是將其限制爲10個字符,就像您當前所做的那樣。使用maxlength =「10」屬性,而不是JavaScript字符計數事情。

<textarea maxlength="10"></textarea>​ 
+0

多數民衆贊成我的意思是說,我知道你不能偷看到剪貼板 –

+0

@AbuHamzah啊好的,那麼maxlength屬性應該爲你工作。 –

+0

這不是跨瀏覽器兼容的。 –

2

如前所述,<textarea maxlength="10">將工作的情況下少量的 - 但不是所有

很難確定如何防止用戶(例如Firefox中)輸入文本區域,選擇瀏覽器菜單Edit,然後單擊Paste。我對如何防止這種情況感到不知所措。您可以檢查keydown事件以防止ctrl + v。您可以禁用上下文菜單以禁止右鍵單擊文本區域(儘管惡意用戶可以編輯前端JavaScript,然後重新啓用此功能)。

總之,沒有通用的方法來阻止用戶以正確的方式粘貼。

但是,你可以破解一個解決方案(總是我最喜歡的,當它似乎沒有辦法繼續你真正想要的東西)。我將要提出的這種方法取決於您運行多少個定時器。如果您有多個動畫定時器,谷歌建議您嘗試將它們全部放入其他定時器單元中。如果是這種情況,請重構您的定時器。

實施全局計時器。實現一個基於該定時器運行25ms的函數。緩存textarea的內容。看看這些內容是否已經改變。

textarea的

<textarea id="maintextarea"></textarea> 

腳本

/*init*/ 
var globalTimer = new Date(); 
var cachedText = document.getElementById("maintextarea").value; 
var iterationCount = 0; 

function cacheText() { 
    cachedText = document.getElementById("maintextarea").value; 
} 

function upDateTimer() { 
    globalTimer = new Date(); 
    var timerTimeout = setTimeout('upDateTimer()', 5); 
    timeBasedOperations(); 
} 
upDateTimer(); 

function timeBasedOperations() { 
    iterationCount++;//this will allow timing to occur 
    //TODO: Add in other timers calls based on global timer 
    if (iterationCount % 5) {//every fifth iteration (hence 25ms) 
     checkTextArea(); 
    } 
} 

function checkTextArea() { 
    var currentText = document.getElementById("maintextarea").value; 
    var textArea = document.getElementById("maintextarea"); 
    if (currentText.length > cachedText.length) { 
     //TODO: Add additional logic for catching a paste or text change 
     textArea.value = currentText.substr(0, 10); 
    } 
    cacheText(); 
} 

我覺得雖然這實現了一個計時器,這是一個非常實用的解決方案。它也適用於工作(測試)。

:)