2013-01-15 48 views
3

我眼前這個HTML代碼:調用從下拉JavaScript函數下來

Theme 
<ul id="dropdown"> 
    <li> Choose theme 
     <ul> 
      <li id="stylesheet1" > <a href="#"> Default </a></li> 
      <li id="stylesheet2" > <a href="#"> Theme 1 </a></li> 
      <li id="stylesheet3" > <a href="#"> Theme 2 </a></li> 
      <li id="stylesheet4" > <a href="#"> Theme 3 </a></li> 

     </ul> 
    </li> 
</ul> 

,並在獨立的JavaScript文件我有這樣的代碼:

function initate() 
{ 

document.getElementById("myList").onchange = function() { 
    var sheet=document.getElementById("myList").value; 

    if(sheet=="one"){ 
    setActiveStyleSheet("theme1"); 
    } 
    else if(sheet=="two"){ 
    setActiveStyleSheet("theme2"); 
    } 
    else if(sheet="three"){ 
    setActiveStyleSheet("theme3"); 
    } 
    else{ 
    setActiveStyleSheet("default"); 
    } 
    return false 
}; 

} 

window.onload = initate; 

現在這個工作不錯,但不是我在上面使用我的下拉想使用這個HTML代碼來代替:

Select Theme 
<form> 
<select id="myList" > 
    <option id="stylesheet1">Default</option> 
    <option id="stylesheet2">Theme 1</option> 
    <option id="stylesheet3">Theme 2</option> 
    <option id="stylesheet4">Theme 3</option> 
</select> 
<form> 

正如之前我想有我的事件處理程序在我單獨的JavaScript文檔中。我嘗試將我的javascript替換爲這些功能:

document.getElementById("stylesheet1").onchange = function() { 
    setActiveStyleSheet("default"); 
    return false 
}; 

但它不起作用。你如何以這種方式改正呼叫功能?

+0

參考這樣的回答:http://stackoverflow.com/a/5024082/754519 – Ram

+0

如前所述,我想保持我的事件處理程序的一個單獨的JavaScript文件內。 – Benji

回答

6

演示:http://jsfiddle.net/zYMFa/

的選項使用價值和處理select變化事件。 select的value屬性獲取所選選項的值,因此您可以在change函數中使用this.value。

<form> 
<select id="myList" > 
    <option value="default">Default</option> 
    <option value="theme1">Theme 1</option> 
    <option value="theme2">Theme 2</option> 
    <option value="theme3">Theme 3</option> 
</select> 
<form> 

document.getElementById("myList").onchange = function() { 
    setActiveStyleSheet(this.value); 
    return false 
}; 
+1

哦,很好,+1使用'價值' – Jeff

+0

這似乎正是我想要的,但它不適用於我的代碼是樣式表更改的其餘部分。如果我更新我的問題,你能幫我解決嗎? – Benji

+0

是的,我們需要真實的代碼或真實的演示來幫助你。 – antejan

3
<select id="myList" > 
    <option id="stylesheet1" value="default">Default</option> 
    <option id="stylesheet2" value="one">Theme 1</option> 
    <option id="stylesheet3" value="two">Theme 2</option> 
    <option id="stylesheet4" value="three">Theme 3</option> 
</select> 

document.getElementById("myList").onchange = function() { 
    var sheet=document.getElementById("myList").value; 

    if(sheet=="one"){ 
    setActiveStyleSheet("theme1"); 
    } 
    else if(sheet=="two"){ 
    setActiveStyleSheet("theme2"); 
    } 
    else if(sheet=="three"){ 
    setActiveStyleSheet("theme3"); 
    } 
    else{ 
    setActiveStyleSheet("default"); 
    } 
    return false 
}; 
+0

這是一個:你不能把處理程序放在'option'元素上,只有父'select' - 那麼你必須弄清楚選擇了什麼。如果我沒有記錯的話,你應該可以使用'this'而不是'document.getElement ...' – Jeff

+0

這不適用於我的其他代碼。看起來它只是跳到選項三,無論如何。 – Benji

+0

我在'three'比較中錯過了一個'=='...嘗試修復它,看看它是否發生了變化。另外,也許alert(或console.log)'sheet'在那個函數中,看看它是否被正確定義 –

相關問題