Jquery onclick动态更改

时间:2013-11-01 09:40:09

标签: javascript jquery jquery-plugins

以下是我的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")});
}

3 个答案:

答案 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