2009-07-24 50 views
13

我申請:爲什麼我的jQuery點擊處理程序似乎爲其某些目標運行多次?

$(".newContentLink").click(function() { 
    $("#test").append("1"); 
}); 

在此:

<span id="contents"> 
<input class="newContentLink" type="submit" style="width: 100%;" value="CREATE A NEW CONTENT"/> 
<span id="content1" class="content study"> 
</span> 
<input class="newContentLink" type="submit" style="width: 100%;" value="CREATE A NEW CONTENT"/> 
<span id="content3" class="content study"> 
</span> 
<input class="newContentLink" type="submit" style="width: 100%;" value="CREATE A NEW CONTENT"/> 
<span id="content4" class="content category"> 
</span> 
<input class="newContentLink" type="submit" style="width: 100%;" value="CREATE A NEW CONTENT"/> 
</span> 

爲什麼 當我點擊第2個按鈕將其添加111, 下一步按鈕增加了11 ,最後一個加1?

+1

嘗試apending的 「

」,而不只是 「1」 時解除綁定click事件, – 2009-07-24 14:43:27

+0

哪裏#TEST?也許這是代碼 – MacAnthony 2009-07-24 14:46:06

回答

20

無法複製。我懷疑你是虛假陳述—過於簡單,主要是—你的情況。準確地說,我相信你會動態地添加這些輸入,並且每次調用$(".newContentLink").click(...)時,—自然會繼續向頁面中的每個.newContentLink應用點擊處理程序的額外副本。

因此,您創建的最新輸入有一個點擊處理程序的副本,並附加一個1。第二個最近有兩個副本並追加11。第三有三個附加111

爲了防止這種情況,應用單擊處理程序到新創建的DOM元素,而不是$(".newContentLink")(這總是意味着.newContentLink)。

1

嘗試給您的提交輸入元素提供不同的名稱。

+0

我想要的東西,但它們是由我的腳本在循環中形成的(我只把我希望的代碼的相關部分放在那裏)。 – Eliyahu 2009-07-24 14:46:01

+1

我只是擔心它可能與成功的控制定義有關。 – EFraim 2009-07-24 14:47:19

2

不是一個jQuery錯誤 - Working Demo

必須有與其他人在你的代碼的東西有問題。標記中id="test"的元素在哪裏?

編輯:

剛看完chaos' answer,這聽起來像一個合理的解釋。

順便說一句,元素ID必須HTML標記內是唯一的 - 這是HTML規範的一部分,可能是另一個可能的解釋

6

由於chaos says,你可能會調用每次click()你加一個,和他們在積累。

如果您要將這些項目動態添加到文檔中,並且需要確保將此功能添加到您添加的每個項目中,那麼使用活動如何?

$('#contents').on('click', '.newContentLink', function() { 
    $("#test").append("1"); 
}); 

這將確保將規則動態應用一次到文檔中的任何合格類。

1

我有一個類似的問題....想通了,我在一個循環中應用變化函數......即,我前面的代碼是....

$("table#UserIRTable > tbody > tr").each(function() 
{ 
    .............. 
    .............. 

    $("input[id='thisMonthSupply']").change(function(e){ 
     ...... 
    }); 
    .......... 
    .......... 
} 

了變化功能出來,賓果遊戲...它的工作.....

2

爲了確保功能只在點擊事件 執行一次你可能使用$(「。newContentLink」)。一();

$(".newContentLink").one(function() { 
    $("#test").append("1"); 
}); 
7

或可以在每次添加新元素

$('.newContentLink').unbind('click'); 

$(".newContentLink").click(function() { 
    $("#test").append("1"); 
}); 
相關問題