【问题标题】:Using jQuery delegate() to replace live()使用 jQuery delegate() 替换 live()
【发布时间】:2013-02-28 06:33:40
【问题描述】:

我目前正在使用 jQuery 创建内容。

Live(),根据 jQuery API 描述:为现在和将来匹配当前选择器的所有元素附加一个事件处理程序。。我需要这行代码才能在将来工作。

$(".trash").delegate('.delete_gallery', 'click', function(event) { // 不起作用 $(".delete_gallery").live("click", function(event) { // 有效

如何让代理工作?我不想使用已弃用的函数。

.on() 不是一个选择。希望这也不是一个重复的问题,我找不到任何解决这个问题的方法,他们都只是说该怎么做。

谢谢! 雅各布

【问题讨论】:

  • 为什么.on() 不是一个选项?
  • 只是一个健全性检查,但 .delete_gallery 是 .trash 的子级吗?
  • @ethagnawl,是的,还有 Austin,我无法控制插件用户使用的 jQuery 版本。

标签: jquery jquery-delegate


【解决方案1】:

您最好将事件处理程序委托给 $(document) 而不是 $(".trash'),因为这意味着您不依赖它存在。

【讨论】:

  • 你能澄清一下吗,因为这实际上修复了它。 .delete_gallery 是 .trash 的直接子代,所以我认为直接一点会更好。
  • @Jacob,您的 .trash 元素可能是动态的。事件委托通过将非动态祖先上的事件绑定到您的动态内容来工作。 document 之所以有效,是因为它是 DOM 树的根,因此始终是静态的。
  • 似乎是这样。谢谢!选择此答案,因为它包含原因。
【解决方案2】:

试试

$(document).delegate('.delete_gallery', 'click', function(event) { 

【讨论】:

    【解决方案3】:

    你还有.bind()

    示例

    $(".trash").bind('click', function(event) {
    

    【讨论】:

    • .bind() 仅适用于预先存在的元素,以后不再适用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 2014-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多