2013-03-03 37 views
8

我趕上粘貼事件與$('selector').on('input', function(event) { ... });上的jQuery(「輸入」)使用event.preventDefault()與

然後我試圖測試什麼被粘貼,如果沒有通過驗證,取消粘貼event.preventDefault()。不幸的是,在執行監聽器函數時,文本已經被粘貼,並且event.preventDefault()什麼都不做。

那麼捕捉粘貼事件的好方法是什麼,如果粘貼的東西沒有被驗證,撤銷/阻止粘貼?

我知道我可以使用.on('paste', function(event) { ... }),但是這並沒有給我粘貼的文本或者粘貼後的輸入元素的內容,除非我使用setTimeout()和一些等待時間,我想避免使用setTimeout()

+0

你可以創建一個jsFiddle的例子嗎? – j08691 2013-03-03 03:25:20

+0

'event.preventDefault()'阻止默認動作,當綁定到'input'事件時,它確實不會阻止您在輸入中鍵入或粘貼任何內容?當從粘貼的內容緩存值時,您必須推遲它獲得一個值,但不是「一分鐘」,將超時設置爲零,它應該仍然工作。 – adeneo 2013-03-03 03:28:06

+0

如果設置'100ms'超時來捕獲粘貼上的輸入值並驗證而不是'分鐘',我想這樣可以。 – SRy 2013-03-03 03:30:16

回答

-1

我對這個問題的理解是,我們絕不允許在文本框中粘貼任何數據,除非它通過了特定的驗證。我們可以在用戶輸入任何內容時使用偵聽器來捕獲值,而不是使用event.preventDefault(),並根據特定條件進行驗證,如果驗證失敗,則清空文本框值。

(這是解決辦法,如果我們仍然需要使用on('input')事件偵聽器)

示例代碼(我用console.log()打印粘貼值):

HTML

<input type='text' id="selector" /> 

JS

$(document).ready(function() { 
$('#selector').on('input', function (e){ 
     if(e.target.value !== "myValue"){ 
     $('#selector').val(''); 
    } 
    else{ 
     console.log(e.target.value); 
    } 
}); 
}); 
0

嘗試使用jquery的.change事件。

如果值不符合條件,則將值設置爲空白。

相關問題