JavaScript检查委派链接上的任何绑定或冒泡事件

时间:2011-12-21 17:59:56

标签: javascript jquery javascript-events

我有一些执行以下操作的跟踪代码,并且绑定到所有<a>代码上的点击事件(setTimeout符合Google网站上的建议,这是在卸载事件之前允许跟踪事件触发所必需的,我想):

$.fn.trackClick = function (e) {
    // track the click
    try {
        _gaq.push(['_trackEvent', 'clicked-link', this.parents('[id]:first').get(0).id, (this.text() || this.children('img:first').attr('alt'))]);
    } catch (err) {}

    //only reload links with no bound events
    if (!this.data('events') && !this.get(0).onclick && !e.isDefaultPrevented()) {
        // wait a moment for the tracking to process, then follow the link
        setTimeout('document.location = "' + $(this).attr('href') + '"', 200);
    }
}

问题是,我们网站上有数百个链接,其中一些实际上没有重新加载任何东西(例如对话框关闭按钮),所以我需要setTimeout只在没有时才运行JS事件绑定到元素(或DOM树)。我想出了上面的if语句,我认为它可以解释任何和所有可能的绑定事件(代码库跨越了几年,所以那里可能存在各种愚蠢)。有没有其他人有更好的方法来做到这一点,或者我错过了一些可能的事件检查?

更新:这可能是关键,我应该早些提到它。上面的函数是以委托方式调用的,因此父div中的事件实际上是先触发的(因此我需要检测它们)。

jQuery(document).delegate('a', 'click', function(e){
  e.preventDefault();
  $(this).trackClick();
});

0 个答案:

没有答案