javascript - 枚举 Javascript 中 getElementsByClassName 返回的元素

标签 javascript

我有以下标记和脚本来模拟简单的计算器

HTML:

<input id="txtResult" type="text" readonly="readonly" /><br />
    <input id="txtInput" type="text" /><br />
    <button id="btn7" class="number">7</button>
    <button id="btn8" class="number">8</button>
    <button id="btn9" class="number">9</button><br />
    <button id="btn4" class="number">4</button>
    <button id="btn5" class="number">5</button>
    <button id="btn6" class="number">6</button><br />
    <button id="btn1" class="number">1</button>
    <button id="btn2" class="number">2</button>
    <button id="btn3" class="number">3</button><br />
    <button id="btnClear">C</button>
    <button id="btn0" class="number">0</button>
    <button id="btnClearEntry">CE</button><br />
    <button id="btnPlus">+</button>
    <button id="btnMinus">-</button>

Javascript:

脚本尝试将单击事件处理程序附加到按钮。

window.onload = function()
{
    var buttons = document.getElementsByClassName("number");

    for (var btn in buttons)
    {
        console.log(btn); //print the value of "buttons", i.e 1, 2 ,3

        btn.addEventListener("click", numberClick, false);  // JavaScript runtime error: Object doesn't support property or method 'addEventListener'
    }


    //However accessing an element directly works !!!
    var btn5 = document.getElementById("btn5");

    btn5.addEventListener("click", numberClick, false);
}

function numberClick()
{
    var input = document.getElementById("txtInput");
    input.value = input.value == "0" ? this.innerText : input.value + this.innerText;
}

这里的问题是当我循环按钮并尝试附加事件处理程序时,它引发了异常。但是,当使用 getElementById 直接检索按钮时,代码可以正常工作。

您能解释一下原因吗?

最佳答案

nodeList是类似数组的,所以应该使用常规的for循环,并且querySelectorAll有更好的支持

window.onload = function() {

    var buttons = document.querySelectorAll("number");

    for (var i=buttons.length; i--;) {
        buttons[i].addEventListener("click", numberClick, false);
    }
}

当使用 for-in 循环时,它是

for ( key in object )

原来如此

for (var btn in buttons) {
    buttons[btn].addEventListener
}

关于javascript - 枚举 Javascript 中 getElementsByClassName 返回的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22491709/

相关文章:

javascript - 选中单选按钮时,如何从 span 中获取 Apple?查询

javascript - 如何在没有 jQuery UI 的情况下创建简单的 jQuery 选项卡?

javascript - 如何在按钮可见时触发 javascript 事件?

javascript - 使用 javascript 的好建议(来自 Python)

javascript - 如何使用 jQuery 仅检索隐藏输入上逗号分隔值中的第二项

javascript - 在不发出值的情况下完成的 Rxjs 可观察通过单元测试,但不应该

javascript - 将 jquery fancybox 显示为 ajax 成功

javascript - "Refill"一个数组

javascript - 我怎样才能让这个固定的导航停止闪烁?

javascript - Angular Directive(指令)不适用于子元素