2010-11-04 53 views
3

我有一個與onChange事件關聯的Javascript函數。我知道一些瀏覽器在文檔或元素級別上支持onPaste。有沒有辦法確定onChange事件是否由「粘貼」引起 - 我嘗試添加一個全局變量,在onPaste被觸發時設置,然後在我的onChange例程結束時重置它,但不能保證OnCaste函數在onChange之前被調用。如何確定onChange事件是否由onPaste調用

+0

'change'事件僅在文本字段模糊時觸發。如果發生多個變化,就不可能知道是什麼觸發了它。 – eyelidlessness 2010-12-07 08:29:55

回答

0

我不認爲你能夠做到這一點普遍。請參閱測試此功能的current state

檢測粘貼的一種方法是計算字段具有焦點後「按鍵」之間的時間。

1

這個工作對我罰款:

<input type="text" onchange="ValueChanged(event, this);" onpaste="this.setAttribute('pasted', '1');"/> 


<script type="text/javascript"> 
function ValueChanged(evt, sender) { 
    var blnCameFromPaste = ((sender.getAttribute("pasted") || "") == "1"); 
    if (blnCameFromPaste) 
     alert("changed by paste"); 
    else 
     alert("changed without paste"); 
    sender.setAttribute("pasted", "0") 
} 
</script> 
+0

它適用於哪個瀏覽器/版本? – 2010-11-04 17:55:26

+0

IE8和Chrome 7. – 2010-11-05 03:45:57

1

你可以用onkeypress事件/的onkeyup /的onkeydown/onPaste代替的onChange。

+1

也可以使用'input'事件。除了IE之外,所有瀏覽器都支持'input',可以使用'propertychange'事件非常有效地模擬IE。除了捕獲按下什麼鍵以外,'input' /'propertychange'事件還可以處理關鍵事件所需的一切。 – eyelidlessness 2010-12-07 08:36:07

0

每次看到onchange事件時,都會將該字段值的當前長度與上一個長度進行比較,並將當前時間與上一次進行比較。如果字符輸入的速度比人們能夠想象的更快,那麼它們一定是被粘貼的。