2012-10-21 153 views
0

我生成的下拉菜單適用於Firefox和IE,但不適用於Google Chrome。我有javascript下拉菜單不適用於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),它應該是所有瀏覽器兼容的。請有人幫忙。

+0

您可以在重現問題的同時最小化代碼嗎? – tobspr

+0

@Tobias Springer:我試圖簡化它。剩下的基本上就是創建每個選項。 – user963070

+0

@ user963070 Chrome應該在javascript控制檯(F12或rightclick> inspect元素)中確切地告訴你問題是什麼。 – Stecman

回答

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); 
} 
+0

你可以使用「點擊」而不是「改變?」這對我有效。 – user963070

+0

是的,和大多數[其他事件類型](http://www.w3.org/TR/REC-html40/interact/scripts.html#events)。使用適合您需求的東西。 – Stecman