如何确定事件是不是已与 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 绑定 [重复]的主要内容,如果未能解决你的问题,请参考以下文章