以下是我的JQuery onclick函数。在图像上应用了一个事件。
此代码根据收到的数据值更改onclick事件 我在代码中添加了一个断点,如下面的代码所示。 一个奇怪的事情是,在我的第一次点击解释器只传递我的代码一次是正常的。
但是当我点击第二次时它会通过2次
第三次点击它传递4次
第5次点击8,依此类推
,即每次点击调用的回拨数量呈指数增长。现在我的问题是为什么会这样。
注意:所有变量都已正确定义,但为简化起见,我将其余代码条带化。
updateUser = function (user, block) {
jQuery.ajax({
type: "POST",
url: "index.php?option=com_contentbuilder&controller=myActicateUser",
data: data,
dataType: "json",
success: function (data) {
if (data) {
var pinID = "#pin" + user;
user = data[0];
>>breakpoint if (data[1] === "0") {
jQuery(pinID).click(function () {
updateUser(user, "1")
});
jQuery(pinID).attr("src", tack);
} else if (data[1] === "1") {
jQuery(pinID).click(function () {
updateUser(user, "0")
});
jQuery(pinID).attr("src", tick);
}
}
}
});
}
我已经尝试过的是
if(data[1]==="1"){
jQuery(pinID).unbind();
jQuery(pinID).removeAttr("onclick");
jQuery(pinID).click(function(){updateUser(user,"0")});
}
答案 0 :(得分:4)
这是因为每次调用updateUser
时,它都会在相同的元素上绑定其他click
个处理程序。
首先unbind
( jQuery(pinID).unbind('click').click(...)
)或仅在updateUser
之外添加绑定
答案 1 :(得分:3)
而不是基于jquery插件的Click,你可以使用
jQuery(pinID).live("click",function(){updateUser(user, "1")})
or
jQuery(pinID).on("click",function(){updateUser(user, "1")})
可能会帮助你。因为这些将动态绑定并处理您的元素的click事件。
答案 2 :(得分:-2)
感谢Gaby和Anand, 我写自己答案的原因是我用这两个回复解决了问题 为什么我更喜欢写自己的答案。
我发现的是如下
以下是我的事件registring标记
<img src="hello.png" onlick="updateUser()"/>
现在我观察到的是跟随线
jQuery(pinID).unbind();
除非删除了img标记中的onclick属性,否则无法取消绑定上述onclick事件。所以在unbind之前我添加了以下声明
jQuery(pinID).attr("onclick", "");
它开始工作了。但另一个问题是,unbind对于使用注册的事件也不起作用
jQuery(pinID).click(function () {
updateUser(user, "0")
});
所以我替换了Anand提出的上述行
jQuery(pinID).on("click",function(){updateUser(user, "1")})
最终的工作代码如下
success: function(data) {
if (data){
var pinID="#pin"+user;
user=data[0];
if(data[1]==="0"){
jQuery(pinID).attr("onclick","");
jQuery(pinID).unbind();
jQuery(pinID).on("click",function(){updateUser(user,"1")});
jQuery(pinID).attr("src",tack);
}
else if(data[1]==="1"){
jQuery(pinID).attr("onclick","");
jQuery(pinID).unbind();
jQuery(pinID).on("click",function(){updateUser(user,"0")});
jQuery(pinID).attr("src",tick);
}
}
}
再次感谢你们两位 Anand 和 Gaby