【问题标题】: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 内容的内部执行?或者在你的页面上一次?

标签: javascript jquery 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){ // 使用数据渲染页面 }); });
猜你喜欢
  • 2011-09-15
  • 2015-01-14
  • 2013-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-19
  • 1970-01-01
相关资源
最近更新 更多