0

单击按钮会显示 Combo Box 并选择 Combo Box 。没有调用更改事件。

请让我知道我在哪里犯了错误。

<html>
<head>
<script src="jquery17.js" type="text/javascript"></script>
<script>
  $("select").change(function(){
        alert(this.id);
    });

$(document).ready(function(){
  $("button").click(function(){
   var s = $('<select />');
   var data = {
    'foo': 'bar',
    'foo2': 'baz'
}
for(var val in data) {
   $('<option />', {value: val, text: data[val]}).appendTo(s);
}
s.appendTo('body');
 });
});
</script>
</head>
<body>
<div id="div1"></div>
<button>Get External Content</button>
</body>
</html>
4

3 回答 3

3
$(document).on("change", "select", function(){
        alert($(this).attr("id"));
});

由于<select>标签是动态附加的,因此您必须在其上委托事件。

于 2013-01-31T06:41:18.077 回答
1

你必须把它放在doc ready但是在将它们附加到 body 之后,是的,这是动态的,所以将事件委托给它closest parent element本身document,它是所有的父级。

<script>
  $(document).ready(function(){
      $("button").click(function(){
           var s = $('<select />');
           var data = {
                 'foo': 'bar',
                 'foo2': 'baz'
            }
           for(var val in data) {
               $('<option />', {value: val, text: data[val]}).appendTo(s);
            }
          s.appendTo('body');
       });

       // you need to place that here.
             $(document).on('change', 'select', function(){
                 alert(this.id);
             });

    });

于 2013-01-31T06:49:42.317 回答
1
$("select").change(function(){
    alert(this.id);
});

问题是你不在你的$(document).ready(function(){街区内这样做。

将它移到那里,否则您将在尚不存在的 DOM 元素上设置事件处理程序。

于 2013-01-31T06:42:17.577 回答