2012-09-12 131 views
1

如果您針對特定keyCodekeypress事件調用preventDefault(),那麼默認值將被阻止多長時間?它是爲了瀏覽器會話的生命還是僅在加載特定頁面時使用?是否0123,的行爲相同?event.preventDefault()持續多久?

一些示例代碼:

<script type="text/javascript"> 
<![CDATA[ 

    function keydownhandler(e) 
    { 
    switch (e.keyCode) 
    { 
     case VK_BACK: 
       case 461: 
     preventDefault(); 
     break; 

     default: 
     break; 
    } 
    } 


    document.addEventListener("keydown", keydownhandler, true); 
]]> 
</script> 

回答

1

preventDefault()防止默認動作發生,即瀏覽器在按Enter鍵後發佈form。此事件的此實例將永久阻止此默認操作。下次按enter時,您需要防止該按鍵按下。

<div> 
    <a></a> 
</div> 

如果單擊<a> -tag股利,直到還得到它起泡click -event:

stopPropagation()冒泡到該元素之上的所有元素在該事件發生,即停止事件。 stopPropagation()將防止這種情況。

編輯:在你的情況下,將會阻止keyCode == VK_BACK461的每一個事件,使默認的動作。

+0

這個問題真的是關於這種預防會持續多久的時間。 – codecowboy

+0

對於該特定事件的每個實例,在兩種情況下都將永久阻止。 – Krycke

1

及其永久阻止對於該特定事件的該特定實例。

如果第二次按下某個鍵,這將調用keypress事件的第二個實例,因此,僅僅因爲第一個事件發生,其默認事件不會被阻止。

+0

我綁定了所有按鍵事件到一個事件處理程序,它檢查keyCode值,所以在這種情況下不是這樣的 – codecowboy

+0

它仍然是該事件處理程序的特定實例? – Curt

+0

使用函數的方式不會改變它的行爲,只要你在listener函數中調用'preventDefault',它就會被阻止。 –

0

preventDefault在傳遞給處理程序函數的事件實例上進行操作,因此如果有兩個具有兩個不同「更改」事件處理程序的輸入,它們將不會在有preventDefault時停止。

stopPropagation與對傳遞給處理程序的事件的操作完全相同。