【问题标题】:What is the "OP concept of delegation" and how does it compare to other delegation concepts?什么是“委托的 OP 概念”,它与其他委托概念相比如何?
【发布时间】:2014-07-17 15:24:05
【问题描述】:

我正在解决我遇到的一些问题 $(".foo").click(function(){...你明白了...});当我通过 .load() 加载内容时,事件不再起作用。我在这里找到了解决问题的方法:jQuery, how to rebind html-elements after .load()

其中一个 cmets 表示委派的使用不正确,并提到了“OP 的委派概念”。

我想更好地理解委派的问题,而不是仅仅通过修复并继续前进。

有人可以解释或指向参考文章,这些文章解释了 javascript 中的委托概念以及“委托的 OP 概念”是什么?谷歌不是很有帮助。

编辑:在你们指出这一点之后,作为“原始海报”的 OP 完全有道理,很难看出我现在是如何错过的。因此,尽管如此,仍在为 javascript 中的委托寻找一个很好的参考。

【问题讨论】:

标签: javascript delegates


【解决方案1】:

认为该评论暗示原始海报 (OP) 可能未正确使用 jQuery 委托事件绑定。很难说,因为原始帖子没有任何示例。

该帖子中有效的解决方案是在 ajax 加载完成后重新绑定所有事件。

但是,另一种解决方案是使用 jQuery on 事件绑定将元素绑定到 DOM 树中更高的永久元素,这样就不必在每次 ajax 加载时重新绑定事件。

$(document).ready(function() {

    $("#containerDiv").on('click', 'button.loadedFromAjax', function() {
       ...handle the click event of a button that is loaded via ajax...
    });

    $("#someButton").on("click", function() { 
        $("#elementToReload").load("page-to-load.html", function() {
             ...no need to bind events here since they are bound already...
        });
    });
});

根据使用情况,与重新绑定每次加载相比,这可能会带来内存和性能提升。

这个jsfiddle 展示了一个替换元素的html但不必每次都重新绑定的示例。

【讨论】:

  • 有没有办法轻松地重新绑定大量函数,或者使用 .on() 而不是 .click() 来绑定事件是更好的做法?
  • .on() 的优点是可以在一个地方定义一次绑定。 learn.jquery.com/events/event-delegation "它允许我们为现在或将来存在的元素附加一个事件监听器。"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多