单击按钮,将显示组合框并选择组合框。 变更事件未被调用。
请让我知道我在哪里犯了错误。
<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>
答案 0 :(得分:3)
$(document).on("change", "select", function(){
alert($(this).attr("id"));
});
由于<select>
标签是动态附加的,因此您必须在其上委托事件。
答案 1 :(得分:1)
$("select").change(function(){
alert(this.id);
});
问题是你不能在$(document).ready(function(){
区块中执行此操作。
将其移动到那里,否则您将在尚不存在的DOM元素上设置事件处理程序。
答案 2 :(得分:1)
你必须将它放在doc ready
中,但是在将它们附加到正文后是肯定的,这是动态的,所以将事件委托给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);
});
});