Jquery“直播”事件没有解雇

时间:2011-09-06 13:43:21

标签: jquery

我遇到了必要的直播活动,因为我正在动态地向网页添加元素。

常规点击事件正常。我想知道实时点击事件失败的原因。我在JSFiddle设置的演示中有说明。也许有人可以向我解释为什么会这样。

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

感谢您的时间。

3 个答案:

答案 0 :(得分:3)

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

当事件到达正文时,“实时”事件处理程序将查看它,如果点击源与您的选择器匹配,它将触发您的功能。

除非链接上的一个处理程序或div停止了事件传播。在这种情况下,事件会停止并且不会冒泡,永远不会到达“实时”处理程序。

我认为jQuery UI会在选项卡上放置一个处理程序,以捕获点击,并且该处理程序实际上正在停止传播,使“实时”处理程序无效。

答案 1 :(得分:1)

.live依赖于事件冒泡到文档,并且您正在停止处理程序的立即传播,从而阻止它工作。试试这个:

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

答案 2 :(得分:0)

使用委托修复它并允许click事件冒泡到锚点:

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

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