如何确定事件是不是已与 jQuery 绑定 [重复]

Posted

技术标签:

【中文标题】如何确定事件是不是已与 jQuery 绑定 [重复]【英文标题】:How to found if an event already bound with jQuery [duplicate]如何确定事件是否已与 jQuery 绑定 [重复] 【发布时间】:2014-04-07 16:27:29 【问题描述】:

我使用的语法类似于

$("body").on("click", ".className", function()
    // some code
);

它工作正常,然后我用 ajax 重新加载了整个页面(没有浏览器刷新),然后事件开始触发两次,另一次刷新 - 触发三次,依此类推。

然后我将代码转换为

$("body").off("click", ".className").on("click", ".className", function()
    // some code
);

它在一定程度上解决了这个问题。即使在此之后,我在某些情况下也会多次开火。有没有办法找出元素上是否存在不止一次绑定的现有“on”事件,将它们全部删除并仅绑定一次?

不确定这是否是一个有效的问题,或者我能够清楚地解释它。

【问题讨论】:

每次使用 ajax 加载页面时都会调用该函数吗? 在第一次绑定后将 init 变量设置为 true,并在再次绑定之前检查该变量。 你最好不要将绑定代码包装在任何处理程序/回调中 javascript 是否在 AJAX 内容的内部执行?或者在你的页面上一次? 【参考方案1】:

如果您每次使用 ajax 加载页面时都进行委派,它将一次又一次地绑定到 body 的子 .classname 上,从而导致不良影响

$(function () 
    $("body").on("click", ".className", function () 
        // some code
    );

    function loadpage() 
        //ajax call
    
    loadpage();
);

尝试将您的事件委托放在加载页面功能之外

【讨论】:

其实我是在点击回调函数内部进行调用并渲染页面。 @Souviiik 那你为什么要在点击处理程序中绑定它??? 你有什么建议?代码就像 $("body").off("click", ".className").on("click", ".className", function() $.ajax().done(function(data) // 使用数据渲染页面 ); );

以上是关于如何确定事件是不是已与 jQuery 绑定 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Jquery:如何根据属性值将按键事件绑定到输入类型“数字”[重复]

jquery中click事件重复绑定问题

jquery事件重复绑定

解决jquery绑定事件重复绑定问题

jquery绑定事件的坑,重复绑定问题

jquery事件重复绑定的快速解决方法