2010-01-07 70 views
27

在這裏發射多次被我的HTMLjQuery的單擊事件是使用類選擇

<li><div class="myLink" id=1>A<div> 
<li><div class="myLink" id=2>b<div> 
<li><div class="myLink" id=3>c<div> 
<li><div class="myLink" id=4>d<div> 
<li><div class="myLink" id=5>d<div> 
<li><div class="myLink" id=6>e<div> 
<li><div class="myLink" id=7>d<div> 
<li><div class="myLink" id=8>g<div> 

我創建了一個jQuery的事件綁定室內用這個代碼:

jQuery(".myLink").click(function(event) { 

     var myId = this.id; 

     location.href = '/x/y?myId=' + myID; 
    }); 

當我在一個鏈接點擊(李項目)。我認爲這會觸發一個點擊事件,當我打電話給this.id,我只會得到我點擊的項目的ID。

但相反,它看起來像:

jQuery(".myLink").click(function(event) { 

被解僱了一遍又一遍,甚至以爲我只是點擊一個鏈接。我在他們和使用過的螢火蟲中加入了一個調試器語句,並且看到這個反覆調用。

任何想法是怎麼回事?

回答

17

如果您關閉<li>標籤,您將解決該問題。我剛剛測試過它,並糾正它。 應

<li> ... </li> 
<li> ... </li> 

<li> 
<li> 
+0

我有一個與img標籤類似的問題,所以@Erik是正確的。我認爲,每個標籤應該有結束標籤來擺脫這個問題。 – 2012-12-29 15:37:17

6

嘗試將id屬性的值放在引號中。奇怪的事情發生時,你只是把id=1

另外,你怎麼知道它是多次發射?把此行的函數的頂部和觀看螢火蟲日誌,看看發生了什麼:

console.log("clicked on", jQuery(this), "which has id", jQuery(this).attr('id')); 

編輯:

嘿,正如其他人指出...確保您的標記是有效的太:P

+0

同意。使用id =「1」,id =「2」,id =「3」等。 – PHLAK 2010-01-07 23:14:19

+7

我也建議正確關閉你的div和li元素。 – alex 2010-01-07 23:15:02

+1

在標記中具有ID屬性將不起作用,只是FYI – Erik 2010-01-07 23:32:25

1

從發佈的HTML看來,它看起來像myLink DIV是嵌套的,導致事件被多次觸發,因爲每個DIV都獲得了點擊。如上所述,確保標籤格式正確。每行末尾的DIV標籤是否應該是關閉標籤?

+0

打我衝一下:) – Erik 2010-01-07 23:31:35

+0

你並不孤單... – zehrer 2011-12-02 12:27:46

69

我有一個類似的問題,我的解決辦法是宣佈click事件之前解除綁定click事件。沒有多大意義,但我不知道多個事件如何附加到單個HTML元素。 (和我的HTML看起來有效的;))

$( 'remove_lkc ')解除綁定(' 點擊')點擊(函數(){..........

+0

我有OP中描述的問題,但我的HTML格式良好。 @ user512568發佈的修復程序適用於我。感謝分享。 – groundh0g 2011-11-06 00:34:49

+8

如果這樣可以解決這個問題,你可能正在重新佈置點擊事件。重新綁定的基礎知識在這裏討論:http://www.learningjquery.com/2008/05/working-with-events-part-2 – Riko 2011-12-19 02:29:11

+0

有一個類似的問題。 $('。class')。on('click',function(){});只是將事件監聽器應用於其他每個元素。不知道爲什麼,但首先解除綁定似乎已經修復它。謝謝! – 2014-04-16 19:58:01

6

我的問題是,當我創建<div>時,我在循環中將事件綁定在一個循環中,因此事件中的每個項目都會反覆添加事件,只是需要仔細檢查。

+2

究竟是這個問題。我在循環內部使用類選擇器$(「。class」)。click(function()),所以我在每次循環迭代時都添加了多個點擊處理程序。確保您的.click處理程序在循環外部設置。 – user1507720 2013-01-03 12:35:33

14

就我而言,我有多個選項卡呈現相同的部分,並且每個部分有$(文件)。準備()調用綁定點擊事件三次。

+4

D'oh!我將js插入局部模板的頂部,以便在我正在處理它時進行測試,並且它發射了四次。如果其他評論似乎不符合我的情況,我是否會撓撓我的頭腦,所以謝謝指出這一點!我完全忘記了我在其他選項卡中的其他地方使用模板... – 2012-04-29 22:16:49

+0

我現在感覺很蠢 – 2013-05-29 14:52:11

1

確保您沒有多次包含js腳本。 如果您在服務器站點中使用框架,請確保佈局和模板不包含相同的腳本。

4

在我的情況下,JavaScript必須與ajax請求一起呈現。

$(document).ready(function(){ 
    $(document).on('click','.className',function(){alert('hello..')}) 
}); 

事件發射多時間..使用.off()刪除所有以前的事件處理程序。 (在使用。對使用相同的簽名())

$(document).ready(function(){ 
    $(document).off('click','.className'); 
    $(document).on('click','.className',function(){alert('hello..')}); 
}); 

希望它可以幫助一些一...

+0

謝謝!它的工作就像魅力,你救我的一天 – 2015-05-06 06:38:56

+0

我的兩個,謝謝@chris .. – 2015-05-19 14:32:20

+0

謝謝!也保存了我的一天 – FastTrack 2015-11-03 17:46:59