如果元素上已经有事件处理程序,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" 主要是抑制元素默认操作的过时方法,无论如何不应再用于该目的。