【问题标题】:Using .detach() removes events?使用 .detach() 删除事件?
【发布时间】:2012-01-30 03:06:16
【问题描述】:

我有一个 DIV,里面有很多内容,我使用 detach() 和 after() 将它放在文档中的其他位置。

在此之前,我使用 .bind() 将一些点击事件放在 DIV 内的复选框上。

这似乎工作正常。

当我完成 DIV 后,我将它放回原来的位置。但是,当我再次使用相同的 .detach() 和 after() 方法时,我的点击处理程序似乎消失了。

这是 detach() 的正常行为吗?是否有适当的方法来保存事件?

对于好奇的人,我的 DIV 包含一个表单,该表单使用绑定单击在复选框上具有一些验证功能。分离用于将表单放置在模式对话框中,并在用户关闭对话框时将其放回隐藏的 DIV。当用户再次打开带有表单的对话框时,我会遇到点击事件丢失的情况。

【问题讨论】:

  • jQuery detach() 应该维护与元素相关的事件处理程序和数据:你能用简化的小提琴重现这个问题吗?
  • 不,detach 将保留事件处理程序,请查看文档。如果您遇到问题,那一定是其他问题。
  • 问题:bind("click") 是否被视为 jQuery 数据?我只是想知道我是否需要使用 detach() 而我可以使用 remove() 代替。
  • @Matthew,是的:查看api.jquery.com/detach 中的实时示例,单击处理程序始终有效。
  • 发布 jQuery 和 HTML 的相关部分可能会有所帮助。

标签: javascript html jquery


【解决方案1】:

因此,使用 .detach() 不会删除事件。

即使使用更接近我的实际代码的小提琴,我似乎也无法重现这一点

http://jsfiddle.net/n874q/5/

我的问题是我的 click 函数在函数绑定时传入的 jQuery 复选框数组上(静默)失败。

我确实解决了这个问题,而是通过函数中的选择器找到复选框,而不是将数组传递给函数。

谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    相关资源
    最近更新 更多