【问题标题】:JQuery alternative to .die().live() in ajaxed content?ajaxed 内容中 .die().live() 的 JQuery 替代品?
【发布时间】:2012-01-28 11:44:22
【问题描述】:

我有一个 ajaxed 表单,它在该表单中生成新输入,这些新输入通过初始 ajaxed 表单中的.live() 附加到它们。

所以,当我关闭这个 ajaxed 表单然后再次打开它而不刷新时,我遇到了问题:我有 2 个实时事件绑定到每个应该只有 1 个实时事件的单独元素。

我看到解决这个问题的方法是在每个 .live() 之前加上一个 .die() 以清除所有以前附加的 live()

我想知道是否有更清洁或更合适的方式来处理这个问题?

【问题讨论】:

    标签: jquery ajax bind live die


    【解决方案1】:

    您知道.live() 的工作原理,对吧?您将其称为一次,事件处理程序会附加到文档并处理与该选择器匹配的所有元素的事件,即使它们在将来被添加。不要每次添加元素时都调用.live();如果您正确使用它,您只需调用.die(),如果您想完全停止处理该特定事件,或者想更改/替换处理程序。

    短版:更简洁、更合适的替代方法是在您不需要时停止拨打.live()

    【讨论】:

    • 我想你不太明白,我设置这个表单的方式是每次加载脚本时都会加载脚本,这就是我正在使用的 mvc 的设置方式。所以 - 每次加载表单时,脚本都会加载 - 关闭表单,重新打开,脚本会再次重新加载。
    • 因此,live 每次都会被调用,因为点击事件是不够的,因为在表单中初始表单加载后,live 事件被附加到新创建的元素。
    • 那么你的表单设置错误。 .live() 应该被调用一次。如果您想在每次加载表单时附加一个事件,请使用常规事件并在正确的时间附加。除非你在谈论一些奇怪的场景......在这种情况下你需要提供代码,因为你很可能正在做一些你不应该做的事情。
    • @BraydonBatungbacal live 是对document 的事件委托...绝对没有必要在该脚本中使用live。每次加载脚本时使用事件委托给最近的共同父级,或者从只运行一次的初始脚本附加live。无论哪种方式,请了解live 的工作原理及其作用:'(
    • 只是为了进一步增加一些混乱:live 现在已弃用,您应该使用on(根据api.jquery.com/live
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多