如果元素上已经有事件处理程序,GTM 将无法工作?
GTM will not work if there is already an event handler on the element?
是否正确:如果元素上已有事件处理程序,GTM 将无法工作?
例如,我想配置按钮点击跟踪。但是如果它已经在代码页中有另一个处理程序(脚本,addEventListener),GTM 会忽略我的设置吗?这是正确的?如果有,GTM在什么情况下不记录事件?
谢谢
不,那不是真的。 Google 即使已经附加了事件处理程序,跟踪代码管理器也能正常工作。但是,如果该事件处理程序中的函数抑制事件传播,它将不起作用。
例如,如果您这样做,GTM 将失败(例如使用 jQuery,但普通 JS 也是如此):
$('a#toTop').on('click', function() {
console.log("Link Clicked");
return false;
});
因为return false
停止了事件传播,这是 GTM 需要工作的 JS 功能。
Google 跟踪代码管理器不会将事件处理程序附加到单个元素。相反,它将事件处理程序附加到文档本身。单击一个元素然后向上传播通过 DOM,直到它遇到文档根并由相应的事件处理程序处理。如果您执行 return false,则事件不会向上传播,并且 GTM 事件处理程序将不起作用。
但是,如果您正确地执行此操作 - 例如通过使用 event.preventDefault()
而不是 return false - 那么 GTM 就可以正常工作了。 "Return false" 主要是抑制元素默认操作的过时方法,无论如何不应再用于该目的。
是否正确:如果元素上已有事件处理程序,GTM 将无法工作?
例如,我想配置按钮点击跟踪。但是如果它已经在代码页中有另一个处理程序(脚本,addEventListener),GTM 会忽略我的设置吗?这是正确的?如果有,GTM在什么情况下不记录事件?
谢谢
不,那不是真的。 Google 即使已经附加了事件处理程序,跟踪代码管理器也能正常工作。但是,如果该事件处理程序中的函数抑制事件传播,它将不起作用。
例如,如果您这样做,GTM 将失败(例如使用 jQuery,但普通 JS 也是如此):
$('a#toTop').on('click', function() {
console.log("Link Clicked");
return false;
});
因为return false
停止了事件传播,这是 GTM 需要工作的 JS 功能。
Google 跟踪代码管理器不会将事件处理程序附加到单个元素。相反,它将事件处理程序附加到文档本身。单击一个元素然后向上传播通过 DOM,直到它遇到文档根并由相应的事件处理程序处理。如果您执行 return false,则事件不会向上传播,并且 GTM 事件处理程序将不起作用。
但是,如果您正确地执行此操作 - 例如通过使用 event.preventDefault()
而不是 return false - 那么 GTM 就可以正常工作了。 "Return false" 主要是抑制元素默认操作的过时方法,无论如何不应再用于该目的。