2011-03-28 161 views
24

我有一個輸入和選擇框的表單,每個都有class="myClass"。我也有以下腳本:jQuery更改事件被調用兩次

$(document).ready(function() { 
    $(".myClass").change(function() { 
     alert('bla'); 
    }) 
}); 

我不明白爲什麼在選擇框或輸入框每次更改後,這個函數被調用兩次。 這裏有什麼問題?

感謝您的幫助!

+2

顯示您的wntire表單代碼 – fl00r 2011-03-28 20:29:15

+3

正如fl00r所示,這將有助於您查看更多的代碼。雙重函數調用通常是無意中將您的處理程序連接兩次的症狀。 – Ender 2011-03-28 20:34:13

+1

謝謝你,Uberstein只是向我展示了我的錯誤 – Israel 2011-03-28 20:42:43

回答

35

我只能想到的是,你在窗體本身使用相同的類。如果是這樣,請從表單標記中刪除myClass樣式。

更正: http://jsfiddle.net/rY6Gq/1/

不完善的雙重警報: http://jsfiddle.net/rY6Gq/

+2

我敢打賭你的權利+1好電話 – mcgrailm 2011-03-28 20:39:07

+2

哦不,你是如此正確,我很愚蠢:(謝謝你! – Israel 2011-03-28 20:39:41

+1

只是指出我在正確的方向,thx。 – fgysin 2013-01-21 11:00:21

-1

嘗試在Firebug調試代碼,而不是報警。它可能是失去焦點,並返回它導致出現兩個變化時,沒有兩個發生

+0

加上我知道這發生在一個朋友,但我不知道他在當時使用的是什麼瀏覽器 – 2011-03-28 20:32:41

3

它發生在同一個類或任何你綁定的屬性也具有相同名稱父或子時。顯然,當你改變一個孩子的時候,父母也會發生變化(孩子的變化)。如果他們具有相同的類別或屬性,則應該觸發兩次。 例如,如果綁定到「myClass」,那麼它將被調用兩次。

<div class="myclass"> 
<select class="myClass"> </select> 
</div> 
+0

非常感謝,因爲它是一個解決方案。在我的情況下,selectpicker生成一個與我的初始選擇標記相同的類 – syler 2016-04-29 07:51:01

7

它的一個bug, 你會任何改變呼叫

+0

謝謝,它幫助。 – tereru 2016-11-08 15:20:33

3

e.stopImmediatePropagation前加

$("#some_id").unbind('change'); 

();是什麼爲我工作。

$(document).ready(function() { 
    $(".myClass").change(function(e) { 
     e.stopImmediatePropagation(); 
     alert('bla'); 
    }) 
});