2013-02-13 69 views
3

我试图启动ajax事件,并将选择列表选项的值作为参数传递给ajax调用。不幸的是,我在.change事件上触发了这个调用,它在选择新选项(即传递先前选择的选项值)之前传递了select选项的值。是否有一个事件会得到所选选项的当前值?许多在此先感谢,替代jQuery中的.change。

<select id='theList'> 
    <option> Option 1</option> 
    <option> Option 2</option> 
</select> 

在JS:

$('#theList').change(function() { 
$.getJSON('Home/MethodName', { var1: Option1Value, var2: MiscValue}, function(data) { 
     //Execute instructions here 
} 
)}); 

我想用.trigger,但我认为,火灾事先为好。

+0

过得好在选择事件的价值观? '$(this).val();'应该正确地反映触发事件的新值。 [工作示例](http://jsfiddle.net/ZaEQN/)。 – jbabey 2013-02-13 19:39:49

回答

4

我认为.change()是你想要的,但是你滥用它。值更改后,更改事件触发。在您的处理程序,你需要阅读的新值:

$('#theList').change(function() { 
    var value = $('#theList').val(); 
    $.getJSON('Home/MethodName', { your_key: value }, function(data) { 
     // ... 
    } 
)}); 

你也可能想在你的<option>标签设置值:

<option value="something"> Option 2</option> 
+1

您不需要设置值;如果没有设置值,它将使用文本。 – Barmar 2013-02-13 19:41:54

+0

@Barmar TIL!很高兴知道。 – kevingessner 2013-02-13 19:42:12

0

您必须获取当前的选择值时做错了什么。以下工作适合我。

http://jsfiddle.net/TJ2eS/

<select id="demo"> 
    <option value=""></option> 
    <option value="a">A</option> 
    <option value="b">B</option> 
    <option value="c">C</option> 
</select> 

$("#demo").change(function() { 
    alert("current select value " + $(this).val()); 
});