附加选择的change()不起作用

我为select元素改变了jQuery函数:

$("#category").change(function(){ $("table[id=advance_search]").append(""); $("tr[id=item_type]").append("OneTwo"); }); $("tr[id=item_type]").children(".field_input").delegate("select[id=type]", "change", function() { console.log("change"); }); 

当我在select#type上更改值时,字符串“change”不会在控制台中显示。 谁能帮我?


编辑,添加

作为$("tr[id=item_type]")

这里的问题是因为change() (以及所有其他事件处理程序快捷方式)在页面加载时绑定,但在此之后动态添加元素。 相反,您需要使用delegate()在附加后将事件附加到此元素。

 $("tr[id=item_type]").delegate("select[id=type]", "change", function() { console.log("change"); }); 

或者,如果您使用的是jQuery 1.7+,则可以使用on()

 $("tr[id=item_type]").on("change", "select[id=type]", function() { console.log("change"); }); 

您可能希望修改您在此处附加的select元素,因为它有一个ID,如果多次附加,可能很容易重复,这会使页面无效。

你需要使用on()函数进行订阅,因为当你使用change元素订阅时,DOM中不存在,而jQuery无法找到它。

 $("select[id=type]").on('change', function(){ console.log("change"); }); 

因为您动态添加它,您必须使用livedelegate事件

 $("select#type").live('change', function() { console.log('change'); }); 

试试这个:

 $("select[id=type]").on("change",function(){ console.log("change"); }); 

从jQuery 1.7开始,不推荐使用.live()方法。 使用.on()附加事件处理程序。 旧版jQuery的用户应该使用.delegate()而不是.live()。

来源: http : //api.jquery.com/live/