addEventListener没有附加我的功能?

时间:2015-11-13 03:56:48

标签: javascript

以下是我的脚本。当我在控制台打开的情况下单击其中一个元素时,我看不到我的数据已传入数组" dataLayer'。

是否与范围有关?为什么函数eventData()不会在点击变量cta_btns中的任何元素时运行?

<script>

  var cta_btns = [].slice.call(document.querySelectorAll("a[href*='pricing']"));
  cta_btns.shift();

(cta_buttons是页面上的一系列链接)

  for ( var i=0; i<cta_btns.length; i++ ) {      
    if (document.addEventListener) { 
      cta_btns[i].addEventListener('click', eventData(), false); 
    } else if (document.attachEvent) { 
      cta_btns[i].attachEvent('on' + 'click', eventData()); 
    } 
  }


function eventData(e) {
  dataLayer.push({
      'event': 'home_cta',
      'iteration': 'hold',
      'gtm.element': e.target,
      'gtm.elementClasses': e.target.className || '',
      'gtm.elementId': e.target.id || '',
      'gtm.elementTarget': e.target.target || '',
      'gtm.elementUrl': e.target.href || e.target.action || '',
      'gtm.originalEvent': e
    });
}

</script>

1 个答案:

答案 0 :(得分:2)

您正在调用方法而不是分配方法

转换此

cta_btns[i].addEventListener('click', eventData(), false); 

到这个

cta_btns[i].addEventListener('click', eventData, false); 

相同
cta_btns[i].attachEvent('on' + 'click', eventData()); 

到这个

cta_btns[i].attachEvent('on' + 'click', eventData);