jQuery如何设置绑定顺序

时间:2011-09-01 17:46:39

标签: javascript jquery

有没有办法设置绑定优先级?

我有这样的链接:

<a href="" class="popItUp" data-track"stuff"> </a>

popItUp绑定以获取网址并在弹出窗口中打开。

data-track是另一种用于发送事件跟踪数据的绑定。

问题: popItUp返回false,并且从不触发数据轨道绑定。有没有办法让jQuery始终首先运行数据跟踪,因为它总会返回true?

由于

代码

// Mixpanel Click Tracking
$('[data-track]').live('click', function () {
    console.log('track it please');
});

$('.popItUp').popupWindow({height:300,width:600,centerBrowser:1});

popUpWindow是一个插件:http://swip.codylindley.com/popupWindowDemo.html

3 个答案:

答案 0 :(得分:4)

为什么不简单地阻止默认操作,而不是返回false?

 $('.popItUp').click(function(e)
 {
      e.preventDefault();

      // Do Stuff
 });

这样,事件没有被取消,它只是没有执行默认操作。

答案 1 :(得分:2)

首先绑定popItUp处理程序,如果returns false data-track binding,则不会调用data-track binding。您需要首先绑定popItUp,如果您想要给它更多的优先级而不管data-track binding做什么。

查看已修改的问题,live使用popItUp完成,该returns false适用于事件冒泡机制。如果e.preventDefault();处理程序popItUp那么它就无法运行。可能是您可以尝试使用{{1}}锚来防止默认行为,而不是在{{1}}处理程序中返回false。

答案 2 :(得分:2)

live的工作原理是捕捉冒出<body>标记的事件。

因此,任何直接添加到元素的处理程序都将在live处理程序之前运行 在直接处理程序中调用stopPropagation()(或return false)可以防止它冒泡,因此live将无法捕获它。