0

生成したドロップダウン メニューは Firefox と IE では機能しますが、Google Chrome では機能しません。私は持っている

function characterList(){
    //code removed that generates select list 
    var optionContainer = document.createElement("option");
    optionContainer.innerHTML = "Show All Character Lines";
    addEvent(optionContainer, "click", filterChar, false);
    selectContainer.appendChild(optionContainer); //appends option to select menu

    for (var i = 0; i < menu_lines; i++){
       var optionContainer1 = document.createElement("option");
       optionContainer1.innerHTML = "blah" //simplified so that names in menu are all "blah"
       selectContainer.appendChild(optionContainer1);//appends option to select menu
       addEvent(optionContainer1, "click", filterChar, false);//I think the problem is here.
    }
}

function filterChar(){
    alert("filterChar");
}


function addEvent(object, evName, fnName, cap) {
   if (object.attachEvent)
       object.attachEvent("on" + evName, fnName);
   else if (object.addEventListener)
       object.addEventListener(evName, fnName, cap);
}

characterList は、HTML ファイルの h3 見出しから取得した名前を (選択オプション タイプの) ドロップダウン メニューに取り込みます。これはうまくいきます。問題は、Google Chrome では、ドロップダウン メニューのクリック時に filterChar が呼び出されないことです。すべてのブラウザーと互換性があるはずの関数 (attachEvent) が与えられています。誰か助けてください。

4

1 に答える 1

0

単一のイベント リスナーを要素にアタッチする必要がありますselect。オプション要素は通常の DOM 要素ではないため、リッスンがonclick機能しません。

単一のonchangeイベント リスナーを選択にアタッチすると、選択が変更されたときに発生します。

addEvent(selectContainer, "change", filterChar, false);

最初のパラメーターとして渡されたイベント オブジェクトを使用して、コールバック関数で選択への参照を取得できます。

function filterChar(e){
    var select = e.target;
    alert("The selected item was index "+select.selectedIndex);
}
于 2012-10-21T19:42:07.933 に答える