0

Chrome 拡張機能に取り組んでいますが、「クリック」イベントをクラスに追加しようとするとエラーが返されます。

Error in event handler for 'undefined': Object #<NodeList> has no method 'addEventListener' TypeError: Object #<NodeList> has no method 'addEventListener'

関数のコードは次のとおりです(popup.js)

listElements: function(elements) {
    iHTML = '';
    for (var i = 0; i < elements.length; i++) {
        ...
        ...
        iHTML += '<div class="theBtn">btn</div>';
        ...
        ...
    }

    $('popup_content').innerHTML = iHTML;

    var btnElements = document.getElementsByClassName('theBtn');
    if (btnElements.length > 0) {
        btnElements.addEventListener("click", clicked);
    }
}

each() も試しましたが、どちらもうまくいきませんでした。同じエラー メッセージです。「btnElements」も完全に正常に記録されます。何か案は?

ありがとう!

4

1 に答える 1

0

代わりにjQueryを使用しているため

var btnElements = document.getElementsByClassName('theBtn');
if (btnElements.length > 0) {
    btnElements.addEventListener("click", clicked);
}

次のようにクリックイベントをサブスクライブします。

$('.theBtn').click(clicked);

getElementsByClassNameは NodeList を返します。イベントを として関連付けることはできませんbtnElements.addEventListener。ただし、これは機能するはずです:

var btnElements = document.getElementsByClassName('theBtn');
for (var i = btnElements.length; i--;) {
    btnElements[i].addEventListener("click", clicked);
}
于 2013-03-30T10:23:43.730 に答える