0

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

3 回答 3

4

那是因为每次调用它都会在相同的元素上updateUser绑定额外的处理程序。click

要么unbind先 ( ) 要么在唯一一次jQuery(pinID).unbind('click').click(...)之外添加绑定updateUser

于 2013-11-01T09:43:03.653 回答
3

而不是 Click,基于 jquery 插件,你可以使用

jQuery(pinID).live("click",function(){updateUser(user, "1")})

or

jQuery(pinID).on("click",function(){updateUser(user, "1")})

可能这会帮助你。因为这些将动态绑定并处理您的元素的点击事件。

于 2013-11-01T09:48:29.250 回答
-2

感谢你们 Gaby 和 Anand,我写自己的答案的原因是我使用这两个回复解决了问题,所以这就是为什么我更喜欢写自己的答案。

我发现如下

以下是我的活动注册标签

<img src="hello.png" onlick="updateUser()"/>

现在我观察到的是下一行

jQuery(pinID).unbind();

除非未删除 img 标记的 onclick 属性,否则无法取消绑定上述 onclick 事件。所以在解除绑定之前我添加了以下语句

jQuery(pinID).attr("onclick", "");

它开始工作了。但另一个问题是 unbind 也不适用于注册的事件

jQuery(pinID).click(function () {
                    updateUser(user, "0")
                });

所以我按照阿南德的提议替换了上述行

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


                            }

            }

再次感谢你们俩阿南德盖比

于 2013-11-01T14:05:39.933 回答