选择一个特定的锚点jquery

时间:2011-06-30 12:51:56

标签: jquery

我的页面上有6个链接,如

<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");
        });
    });

问题是警报pop点击出现了6次,有人可以帮我弄清楚问题。我希望它只出现一次 感谢。

3 个答案:

答案 0 :(得分:2)

由于代码减少了,我唯一能想到的是你的实际代码是调用alert()(或任何代码重复)作为animate()[docs]方法的回调(或者一些接受回调的其他方法。

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

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

});

因此,如果您从缓存的popUp元素集中运行一些代码,并且需要回调,则回调将针对每个元素运行一次。


编辑:另一个可能性是您使用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){

答案 1 :(得分:1)

看看这个。我已经把你的代码放在一张表中,它运行正常。

http://jsfiddle.net/93Mat/

答案 2 :(得分:1)

试试这个:

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

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

       // your stuff goes here
    }
});