2011-06-30 47 views
0

我有我的第6頁的鏈接像選擇特定的錨jQuery的

<a rel='popup'></a> 

我正在選擇鏈接作爲

$(document).ready(function(){ 
    var popUp = $("a[rel='popup']"); 
    popUp.click(function(e){ 
     e.preventDefault();   
     alert("pop clicked"); <-- apperaring 6 times 
     var thiis = $(this); 
     var href = thiis.attr("href"); 
     }); 
    }); 

問題警報彈出框單擊了正在出現6次,任何人可以幫助我找出問題所在。我希望它只出現一次 謝謝。

+0

似乎在Chrome瀏覽器正常工作對我來說(每次點擊僅一個警報):http://jsfiddle.net/qnr7M/ –

+2

這是你的實際的代碼,還是你減少了?我沒有看到任何會導致這種行爲的東西,除非你的''標籤都是嵌套的。 – user113716

+0

您有六個錨標記,並且您將事件處理程序附加到它們中的所有標記。這是它應該工作的方式。你並不是說你點擊了一個錨點,並且每點擊一次就會出現六次警報,對嗎?因爲那很奇怪。 – FishBasketGordo

回答

2

由於代碼被降低,我能想到的唯一的事情就是你的實際代碼調用alert()(或任何代碼重複)作爲回調至animate()[docs]方法(或接受回調一些其他的方法) 。

popUp.animate({/***/}, 1000, function() { 

    alert("pop clicked"); // this will run 6 times 

}); 

所以,如果你正在運行的一些代碼從緩存組popUp元素,它需要一個回調,回調將爲每個元素運行一次。


編輯:另一個posibility將是你的緩存設置,使用each()[docs]方法,但每次迭代過程中應用處理程序到整個集。這會導致6個處理程序被附加到每個元素而不是一個。

$(document).ready(function(){ 
    var popUp = $("a[rel='popup']"); 

    popUp.each(function() { 

     // this would cause 6 handlers to be assigned to each element 
     // instead of one 
     popUp.click(function(e){ 
      e.preventDefault();   
      alert("pop clicked"); 
      var thiis = $(this); 
      var href = thiis.attr("href"); 
     }); 
    }); 
}); 

如果是這樣的話,那麼代替:

popUp.click(function(e){ 

你應該做的:

$(this).click(function(e){ 
+0

nope他們不嵌套在對方我試過'stopPropagation ()'但不起作用 –

+0

@john:是的,但你有沒有考慮我的答案?警報是否在回調中發生。 – user113716

+0

@patrick dw - 不... –

1

試試這個:

var popUp = $("a[rel='popup']"); 

$(popUp).each(function(n, item){ 
    $(this).click(function(e){ 

     // your stuff goes here 
    } 
}); 
+1

+1回答,但一旦你緩存對象重新包裝它在'$'是沒有必要的:)它應該是'popUp.each' –