2011-08-12 78 views
1

我試圖從javascript創建一個選擇輸入,並將一個函數綁定到用戶更改選項時。到目前爲止,我有:javascript選擇輸入事件

filter.change = function() { 
    console.log("CHANGED"); 
} 

但選擇別的東西時沒有任何反應。這段代碼有什麼問題。另外,我怎樣才能在函數中獲得新的選定值?喜歡的東西:

console.log(this.value + "has been selected") 

回答

10

你接近,你需要使用onchange

filter.onchange = function() { 
    alert("CHANGED"); 
    //You can alert the value of the selected option, using this: 
    alert(this.value + " was selected"); 
} 

當然作爲桑德蘭說,你應該addEventListener(和attachEvent)只要有可能。例如:

//Define a onchange handler: 
var changeHandler = function() { 
    alert("CHANGED"); 
    //You can alert the value of the selected option, using this: 
    alert(this.value + " was selected"); 
} 
//First try using addEventListener, the standard method to add a event listener: 
if(filter.addEventListener) 
    filter.addEventListener("change", changeHandler, false); 
//If it doesn't exist, try attachEvent, the IE way: 
else if(filter.attachEvent) 
    filter.attachEvent("onchange", changeHandler); 
//Just use onchange if neither exist 
else 
    filter.onchange = changeHandler; 
+2

當然,應該在可用的地方使用'addEventListener'。 –

+0

addEventListener在IE中工作嗎?你能解釋一下爲什麼addEventListener更好,如果瀏覽器支持較少? – SMKS

5

如果你用這種方式,屬性名是onchange

filter.onchange = function() { 
    alert(this.value + "has been selected"); 
}; 

更多信息:

注意:還有一種註冊事件處理程序的方法,它允許爲同一事件分配多個事件處理程序。欲瞭解更多信息,請看quirksmode.org - Advanced event registration models

+0

當然,一個應在可用的地方使用'addEventListener'。 –

+0

爲什麼使用addEventListener? http://stackoverflow.com/questions/6929528/javascript-difference-event-handlers-listener –

+0

@Delan:我會說這取決於。如果你確定創建一個庫。如果您將它用於您自己的網站並且不使用任何其他庫,則這種方式對於所有瀏覽器差異而言都更容易。 –

1

,如果你會使用jQuery,你可以使用它像這樣

$('select').change(function(){ 
    alert($('select').val() + ' was just selected'); 
}); 

或使用.onchange

filter.onchange = function() { 
    alert(this.value + " was selected"); 
} 

代替.change

+3

這是正確的,但完全沒有必要。 –