2014-06-16 48 views
7

任何想法爲什麼preventDefault不起作用?以下是代碼。 。 。 TKS!形式preventDefault()不適用於更改事件

<head> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"> 

    $(document).ready(function() { 
     $("#text1").change(function(e) { 
      e.preventDefault(); 
     }); 
    }); 

function myFunc() { 
    alert("Random, annoying alert"); 
} 

</script> 
</head> 

只是一個HTML元素:

<body> 
<form name="test" method="post"> 
    <input name="text1" id="text1" type="text" onchange="myFunc();"> 
</form> 
</body> 
+2

您可能的意思是'$(「#text1」)' – blgt

+0

您的例子中有一些錯誤,您實際期望防止的默認值是什麼? –

+0

您是否試圖阻止顯示「隨機,惱人的提醒」?你是否假設myFunc()是你試圖阻止的默認值? –

回答

12

您不能改變事件使用preventDefault因爲它不是取消:

$("#text1").change(function(e) { 
    alert(e.cancelable?"Is cancelable":"Not cancelable"); 
}); 

cancelable屬性只對可以防止的事件是真實的。

+0

非常感謝。有時候,這是最明顯的問題! – SlimJim

+4

那麼如何防止呢? – Triynko

0

preventDefault()是用來防止元素的默認行爲,該默認行爲是在給你的瀏覽器出爐。

像例如,點擊時錨點標記的行爲是啓動一系列事件,將修改url欄和發送一個http請求(我知道過分簡單的解釋)。

通過使用evt.preventDefault(evt) click事件裏面,你可以停止默認行爲,您可以在行動之前做其他操作的行爲,或忽略它一起。

我可以看到你的例子中的問題是onchange的默認行爲是取消選擇輸入框,unighighing它,我不知道這是歸類爲事件(我非常確定它不是)。不是因爲它能夠阻止你附加的功能onchange()。事實上,如果您要使用preventDefault(),myFunc()正是它應該在的地方。

對於要防止的事件,必須有一個結果輸出,而不是修改外觀。例如點擊標籤,提交表單,滾動一個容器。