gpt4 book ai didi

javascript - 监听要触发的函数?

转载 作者:行者123 更新时间:2023-12-02 17:07:40 27 4
gpt4 key购买 nike

这更像是一个学术问题,而不是我遇到的问题。

我编写了一个函数,为 Google Analytics 事件跟踪设置点击处理程序。它首先使用命名空间删除任何先前的单击处理程序,以免干扰可能应用的其他单击处理程序。使用 jQuery 的 $.each() 它基本上循环遍历数组中的 ID,应用 categoryactionlabel 作为 data-* 属性和一个稍后引用它的类。

然后,它使用之前设置的data 属性来设置点击处理程序,进而触发 Google Analytics 事件跟踪。

我的问题基本上是,我可以将此函数绑定(bind)到针对所有点击处理程序的 .unbind().off() 方法吗? (不是命名空间的)

因此,如果其他人取消绑定(bind)应用了事件跟踪代码的按钮上的所有点击处理程序,setupEventHandlers()函数会自动运行并重新应用丢失的 GA事件跟踪代码?

更新的问题

我最初的问题可能不清楚我想要实现的目标。

所以 DOM 中有一个按钮。

<input type='submit' value='Confirm' id='confirm-btn'>

setupEventHandlers() 在 DOM 准备就绪后立即运行,并向 #confirm-btn 应用事件监听器,该监听器正在监听 click 事件。另一个函数 randomFunction() 决定需要使用 $.off( ) 方法。我希望能够允许 randomFunction() 删除所有事件监听器,因为它可能没有命名空间(由于原因 x),然后运行 ​​ $.off() 完成后再次 setupEventHandlers()

考虑到我无法直接编辑 HTML,因为它在多个网站上使用,并且跟踪代码适用于单个实例。

function setupEventHandlers(){
var buttonsToTrack = [['#buttonId','category','action', 'label'],
['#buttonId2','category2','action2', 'label2'],
['#buttonId3','category3','action3', 'label3']]

$('.js-buttonTracker').off('click.eventTrackingHandler');

$.each(buttonsToTrack, function(index, buttonDetails){
if(document.querySelector(buttonDetails[0]) != null){
$(buttonDetails[0]).attr('data-category', buttonDetails[1]);
$(buttonDetails[0]).attr('data-action', buttonDetails[2]);
$(buttonDetails[0]).attr('data-label', buttonDetails[3]);
$(buttonDetails[0]).addClass('js-buttonTracker');
}
});

$('.js-buttonTracker').on('click.eventTrackingHandler', function(){
_gaq.push(['_trackEvent', $(this).attr('data-category'), $(this).attr('data-action'), $(this).attr('data-label')]);
console.log($(this).attr('data-category') + ' ' + $(this).attr('data-action'), $(this).attr('data-label'));
});

}

最佳答案

// Save the original .off in a variable
(function(jq_off, recursive) {
// Redefine .off
$.fn.off = function(event, selector, function) {
var save_recursive = recursive;
recursive = true;
// Then call the original $.off
var return_val = jq_off.apply(this, arguments);
recursive = save_recursive;
if (!recursive) {
setupEventHandlers();
}
return return_val;
};
)($.fn.off, false);

您不需要重新定义.unbind,因为它只是调用.off

关于javascript - 监听要触发的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25104772/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com