Javascript 正在努力将事件侦听器添加到数组或节点列表
我有一个对象confBtns,它包含两个基于以下html的按钮:Javascript 正在努力将事件侦听器添加到数组或节点列表,javascript,Javascript,我有一个对象confBtns,它包含两个基于以下html的按钮: <footer> <button id="authCreateAcctConfirmNoBtn" class="button2"> No </button> <button id="authCreateAcctConfirmYesBtn" type="submit" class="red-button"> Yes </button> <
<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
所以我有两个问题:
当我在控制台中运行它时,我只得到“未定义”。我希望能够单击然后模糊按钮,然后在控制台中查看数据层的值。但是没有来自函数btnPush的数据层值。您正在搞乱事件。您真正需要的事件是
单击
,而不是模糊
,因为它可能会在用户使用tab导航时触发
addEventListenerConfBtns(confBtns, "click", btnPush);
在btnPush
中,您接收事件作为第一个参数,事件的target
属性是单击的元素,因此:
btnPush = function(e) {
dataLayer.push({
"event":"ButtonBlur",
"elementText": e.target.innerText
})
};
我没有试过,但它应该可以工作。这就是缩进良好的代码的魔力:您可以找到语法错误。请检查第三个代码段,有语法错误。顺便说一句,第三个代码段有一个wierd代码。您正在将对象添加到
addEventListener
的第二个参数中的数组中?它应该有一个功能,请检查。当有人点击按钮时,你正在谈论做一些事情,那么为什么你要使用模糊事件而不是点击事件?它很有效!我不能告诉你我现在有多高兴——谢谢你,我没有得到“e”吗?因此,每当我在事件侦听器函数中调用函数时,第一个参数始终是事件,我可以使用target作为调用事件的元素?这里的规则是什么?@DougFirr是的,你明白了。在任何情况下,您都将在第一个参数中接收事件对象。