21

これが私のコードです:

function addEvent( obj, type, fn ) {
  if ( obj.attachEvent ) {
    obj['e'+type+fn] = fn;
    obj[type+fn] = function(){obj['e'+type+fn]( window.event );}
    obj.attachEvent( 'on'+type, obj[type+fn] );
  } else
    obj.addEventListener(type, fn, false);
}

function alertWinner(){
    alert("You may be a winner!");
}

function showWinner (){
    var aTag = document.getElementsByTagName("a");
    addEvent(aTag, 'click', alertWinner);
}

showWinner();

基本的に、私はファイアバグコンソールで作業しており、タグがクリックされたときにポップアップするアラートを取得しようとしています。

これが機能せず、質問のタイトル(firebugで表示)に記載されているエラーが発生する問題がわかりません。誰か?

4

3 に答える 3

37

document.getElementsByTagNameDOM要素のNodeListを返します。各要素にはaddEventListener関数がありますが、配列には関数がありません。

それをループします:

function showWinner (){
    var aTags = document.getElementsByTagName("a");
    for (var i=0;i<aTags.length;i++){
        addEvent(aTags[i], 'click', alertWinner);
    }
}
于 2013-03-18T19:18:34.383 に答える
7

aTagDOMNodeListからではなく、のインスタンスですDOMElement

代わりにこれを行うことができます:

var aTags = document.getElementsByTagName("a");
var aTag = aTags[0];

しかし、明らかにこのアプローチには、複数のa要素が返される可能性があるという欠点があります。可能であれば、1つの要素のみを返す別のセレクターを使用する必要があります。

于 2013-03-18T19:18:44.753 に答える
4

理由はわかりませんがaddEvent is not defined、Firefoxを使用しました。addEvent()MDNでも見つかりませんでした。私はこれを使わなければなりませんでした:

function showWinner (){
    var aTags = document.getElementsByTagName("a");
    for (var i=0;i<aTags.length;i++){
        // addEvent(aTags[i], 'click', alertWinner);
        aTags[i].addEventListener("click", alertWinner);
    }
}
于 2014-05-25T04:37:45.313 に答える