Javascript Jquery onclick动态更改
下面是我的jqueryonclick函数。应用于图像的事件 此代码正在根据接收到的数据值更改onclick事件。Javascript Jquery onclick动态更改,javascript,jquery,jquery-plugins,Javascript,Jquery,Jquery Plugins,下面是我的jqueryonclick函数。应用于图像的事件 此代码正在根据接收到的数据值更改onclick事件。 我在代码中添加了一个断点,如下所示。 发生的一件奇怪的事情是,在我第一次点击解释器时,解释器只通过我的代码一次,这是正常的 但当我第二次点击时,它会通过两次 在第三次单击时,将其传递4次 第5次单击8,依此类推 i、 e每次单击调用的回调次数呈指数级增长。现在我的问题是为什么会发生这种情况 注意:所有变量都定义正确,但为了简化,我将代码的其余部分剥离了 updateUser = fu
我在代码中添加了一个断点,如下所示。 发生的一件奇怪的事情是,在我第一次点击解释器时,解释器只通过我的代码一次,这是正常的 但当我第二次点击时,它会通过两次 在第三次单击时,将其传递4次 第5次单击8,依此类推 i、 e每次单击调用的回调次数呈指数级增长。现在我的问题是为什么会发生这种情况 注意:所有变量都定义正确,但为了简化,我将代码的其余部分剥离了
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")});
}
这是因为每次调用
updateUser
时,它都会在相同的元素上绑定额外的click
处理程序
首先(
jQuery(pinID)。解除绑定(click')。单击(…)
)或者只在updateUser
外部添加绑定一次,这是因为每次调用updateUser
时,它都会在相同元素上绑定其他click
处理程序
首先(jQuery(pinID)。解除绑定('click')。单击(…)
),或者只在updateUser
外部添加一次绑定,而不是单击,基于jQuery插件,您可以使用
jQuery(pinID).live("click",function(){updateUser(user, "1")})
or
jQuery(pinID).on("click",function(){updateUser(user, "1")})
也许这对你有帮助。因为它们将动态绑定并处理元素的点击事件。基于jquery插件,您可以使用
jQuery(pinID).live("click",function(){updateUser(user, "1")})
or
jQuery(pinID).on("click",function(){updateUser(user, "1")})
也许这对你有帮助。因为它们将动态地绑定并处理元素的点击事件。谢谢你们两位Gaby和Anand,
我自己写答案的原因是我用两个答案都解决了这个问题,所以
为什么我喜欢写我自己的答案
我发现如下所示
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);
}
}
}
下面是我的事件注册标签
<img src="hello.png" onlick="updateUser()"/>
无法解除上述onclick事件的绑定,除非未删除img标记中的onclick属性。所以在解除绑定之前,我添加了以下语句
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);
}
}
}
再次感谢你们两位,加布和阿南,
我自己写答案的原因是我用两个答案都解决了这个问题,所以
为什么我喜欢写我自己的答案
我发现如下所示
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);
}
}
}
下面是我的事件注册标签
<img src="hello.png" onlick="updateUser()"/>
无法解除上述onclick事件的绑定,除非未删除img标记中的onclick属性。所以在解除绑定之前,我添加了以下语句
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);
}
}
}
再次感谢你们两位,我编辑了我的问题。我以前是怎么尝试的,这是在埃迪特portion@arslan,您需要对(数据[1]=“0”)
场景执行相同的操作。。(也不需要删除onclick
属性)我编辑了我的问题。我以前是怎么尝试的,这是在埃迪特portion@arslan,您需要对(数据[1]=“0”)
场景执行相同的操作。。(也无需删除onclick
属性)不,它仅对解除绑定无效。您也必须使用jQuery(pinID).attr(“onclick”,即“);我浪费了一整天来调试这种情况。以上答案包括工作代码。对不起,错误地提到了。尝试不解除绑定()。不,只有解开它才行。您也必须使用jQuery(pinID).attr(“onclick”,即“);我浪费了一整天来调试这种情况。以上答案包括工作代码。对不起,错误地提到了。尝试不解除绑定()。它会起作用的。Mary Anywhere作为答案Mary Anywhere作为答案Mary Anywhere作为答案