2011-09-06 67 views
2

我在动态添加元素到页面时遇到了必要的实时事件问题。Jquery“live”事件没有触发

定期点击事件正常工作。我想知道为什么现场点击事件失败。在JSFiddle中设置的演示中有说明。也许有人可以向我解释为什么会发生这种情况。

演示: http://jsfiddle.net/MezfS/2/

感谢您的时间。

+0

为我工作。 :/ –

+0

Mully你可以发布什么适合你。更新上面的演示并发布你的链接 - 谢谢。 – HGPB

回答

0

与委托,并允许click事件泡尽可能的锚固定它:

$('#pui-tabs a').delegate('.tab-close', 'click', function(e) { 
     tabselector.tabs('remove', tabselector.tabs('option', 'selected')); 
}); 

http://jsfiddle.net/MezfS/21/

1

.live依靠事件一直冒泡到文件,并且你停止你的处理程序的立即传播,从而停止它的工作。试试这个:

$('li[id=^="tab"]').delegate(".tab-close", "click", function(e) { 
    e.stopImmediatePropagation(); 
    tabselector.tabs('remove', tabselector.tabs('option', 'selected')); 
}); 
+0

我已经在我的帖子中的JSFiddle演示中尝试过你的例子,但它不起作用。问题在于现场活动甚至没有被解雇。 – HGPB

3

“活”事件的行为与普通事件处理程序的行为不同。绑定实时事件时,会将事件处理程序附加到页面中最顶层的元素之一(例如body或document)。因为当你点击页面上的任何地方时,你也点击了正文,事件就会冒泡。例如,您点击包含在正文中的div中的链接,将为链接触发事件,为div触发事件,然后触发正文。

当事件到达主体时,“活动”事件处理程序会查看它,并且如果点击来源与您的选择器相匹配,它将触发您的功能。

除非链接上的处理程序之一或div阻止事件传播。在这种情况下,事件就会停止,不会冒泡,永远不会到达“现场”处理程序。

我想,jQuery UI在选项卡上放置一个处理程序,以捕获点击,并且该处理程序实际上是停止传播,使“活”处理程序无用。

+0

谢谢 - 这很有趣。当.close-tab跨度放置在锚的外部时,但我需要它在锚内开火。 – HGPB

+0

好点,但是如果你在e.stopImmediatePropagation();上面加上一个警告,它应该在任何情况下都会触发,对吧?但事实并非如此。 –

+0

在发布之前正在挖掘源代码进行验证,而这正是发生的情况。 – jmar777