我的页面上有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次,有人可以帮我弄清楚问题。我希望它只出现一次 感谢。
答案 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)
看看这个。我已经把你的代码放在一张表中,它运行正常。
答案 2 :(得分:1)
试试这个:
var popUp = $("a[rel='popup']");
$(popUp).each(function(n, item){
$(this).click(function(e){
// your stuff goes here
}
});