Javascript 正在努力将事件侦听器添加到数组或节点列表

Javascript 正在努力将事件侦听器添加到数组或节点列表,javascript,Javascript,我有一个对象confBtns,它包含两个基于以下html的按钮: <footer> <button id="authCreateAcctConfirmNoBtn" class="button2"> No </button> <button id="authCreateAcctConfirmYesBtn" type="submit" class="red-button"> Yes </button> <

我有一个对象confBtns,它包含两个基于以下html的按钮:

<footer>
  <button id="authCreateAcctConfirmNoBtn" class="button2">
    No
  </button>
  <button id="authCreateAcctConfirmYesBtn" type="submit" class="red-button">
    Yes
  </button>
</footer>
我可以只编写两个单独的脚本,并向每个按钮添加一个事件侦听器,如下所示:

dataLayer.push({
    "event":"ButtonBlur",
    "elementText": /*What goes here to grab Yes or No depending which blurred? */
}); 
document.querySelectorAll("#authCreateAcctConfirmYesBtn")[0].addEventListener("blur", 
    dataLayer.push({
        "event":"ButtonBlur",
        "elementText": "No"
    )}
); 
);
“是”按钮也一样

但是我在一个单子里怎么做呢

我试着适应我的需要,但我正在转动我的轮子。以下是我在控制台中尝试的内容:

var confBtns = document.querySelectorAll("#authCreateAcctConfirmYesBtn,authCreateAcctConfirmNoBtn");

btnPush = function() {
    dataLayer.push({
        "event":"ButtonBlur",
        "elementText": /*What will go here to be Yes or No?*/
    })
};

function addEventListenerConfBtns (btns, event, fn) {
    for (var i = 0, len = btns.length; i < len; i++) {
        btns[i].addEventListener(event, fn, false);
    }
}

addEventListenerConfBtns(confBtns, "blur", btnPush);
var confBtns=document.queryselectoral(#authCreateAcctConfirmYesBtn,authCreateAcctConfirmNoBtn”);
btnPush=函数(){
数据层推送({
“事件”:“按钮栏”,
“elementText”:/*这里的内容是“是”还是“否”*/
})
};
函数AddEventListenerConfBTN(BTN,事件,fn){
对于(变量i=0,len=btns.length;i
所以我有两个问题:

  • 我如何让我的功能发挥作用
  • 如何动态传递“elementText”值的是或否

  • 当我在控制台中运行它时,我只得到“未定义”。我希望能够单击然后模糊按钮,然后在控制台中查看数据层的值。但是没有来自函数btnPush的数据层值。

    您正在搞乱事件。您真正需要的事件是
    单击
    ,而不是
    模糊
    ,因为它可能会在用户使用tab导航时触发

    addEventListenerConfBtns(confBtns, "click", btnPush);
    
    btnPush
    中,您接收事件作为第一个参数,事件的
    target
    属性是单击的元素,因此:

    btnPush = function(e) {
        dataLayer.push({
            "event":"ButtonBlur",
            "elementText": e.target.innerText
        })
    };
    

    我没有试过,但它应该可以工作。

    这就是缩进良好的代码的魔力:您可以找到语法错误。请检查第三个代码段,有语法错误。顺便说一句,第三个代码段有一个wierd代码。您正在将对象添加到
    addEventListener
    的第二个参数中的数组中?它应该有一个功能,请检查。当有人点击按钮时,你正在谈论做一些事情,那么为什么你要使用模糊事件而不是点击事件?它很有效!我不能告诉你我现在有多高兴——谢谢你,我没有得到“e”吗?因此,每当我在事件侦听器函数中调用函数时,第一个参数始终是事件,我可以使用target作为调用事件的元素?这里的规则是什么?@DougFirr是的,你明白了。在任何情况下,您都将在第一个参数中接收事件对象。