2011-08-12 79 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

这是正确的,但完全没有必要。 –