动态修改的选择列表不会触发onChange()以获取新的第一个元素

时间:2010-04-24 22:03:47

标签: javascript jquery selectlist

在下面的代码中,我使用jquery 1.4.1在用户点击列表时修改选择列表中的选项(用三个新项替换单个旧项)。选择New 2或New 3会正确触发change()方法(并显示警报),但选择“New 1”则不会。我错过了什么?感谢。

<html>
<head>
<script type="text/javascript" src="js/jquery-1.4.1.min.js"></script>
<script>
$(document).ready(function() {
   $("#dropdown").mousedown(function() {
      $(this).empty();
      $(this).append($("<option></option>").attr("value",100).text("New 1")); 
      $(this).append($("<option></option>").attr("value",200).text("New 2"));  
      $(this).append($("<option></option>").attr("value",300).text("New 3"));  
   });        
   $("#dropdown").change(function() {
      alert($(this).val());
   });        
});
</script>
<body>
<select id="dropdown"><option value="1">Old 1</option></select>

3 个答案:

答案 0 :(得分:2)

因为默认情况下选择了New1。如果您选择的选项不符合更改条件。

答案 1 :(得分:0)

试试这个:

   $("#dropdown").live('change',function() {
      alert($(this).val());
   });     

答案 2 :(得分:0)

在mousedown事件中,您实际上重新生成了选项,因此第一个子项被选中。 相反,您可以尝试添加空选项作为默认选择,如下所示:

$(this).append($("<option></option>").attr("value",'').text("Select"));
$(this).append($("<option></option>").attr("value",100).text("New 1")); 
$(this).append($("<option></option>").attr("value",200).text("New 2"));
......