【发布时间】:2010-02-14 22:42:08
【问题描述】:
在我尝试通过.load() jquery 函数加载内容之前,我有一个覆盖层,其中包含各种以事件为目标的元素,例如关闭按钮和一些选项卡,效果很好!
我决定保持我的标记干净,以使用 .load() 函数加载覆盖内容,这也很有效,除了与通过 ajax 拉取的元素相关的事件不再起作用。
有人有想法吗? :)
【问题讨论】:
在我尝试通过.load() jquery 函数加载内容之前,我有一个覆盖层,其中包含各种以事件为目标的元素,例如关闭按钮和一些选项卡,效果很好!
我决定保持我的标记干净,以使用 .load() 函数加载覆盖内容,这也很有效,除了与通过 ajax 拉取的元素相关的事件不再起作用。
有人有想法吗? :)
【问题讨论】:
您需要在按钮/关闭元素上使用实时绑定。
代替使用
$('a.close').click(function() { ... });
你需要使用
$('a.close').live('click', function() { ... });
此方法是 用于附加的基本 .bind() 方法 元素的事件处理程序。什么时候 .bind() 被调用,元素 jQuery对象是指获取 附加处理程序;得到的元素 后来介绍的不要,所以他们会 需要另一个 .bind() 调用。
【讨论】:
听起来您绑定事件处理程序的元素在您绑定处理程序并在之后通过 AJAX 加载的点上不存在于 DOM 中。也许纠正这个问题的最简单方法是在load() 之后绑定事件处理程序?甚至使用事件委托(使用.live() 使用事件委托)
【讨论】:
.live() 似乎是最佳实践,但您也可以选择使用 .load() 回调重新绑定所有内容,如果您需要,这将为您提供一些灵活性。比如:
function LeBinding() {
$('.clickable').click(function() { ... })
}
$('#container').load(url, data, function() {
LeBinding();
})
【讨论】: