Javascript jQuery:如何通过id获取DOM就绪后在jQuery中创建的元素?
我是jQuery这个奇妙世界的一名程序员,今天我遇到了一个问题 我有一个应用程序列表,用户可以选择。要选择一个应用程序,他们必须单击一个按钮id=add_app{app_id}。当有人添加应用程序时,我会在表上创建一行,列出所有选定的应用程序。在jQuery中创建的这一行中,有一个按钮id=remove\u app\uu{app\u id}将应用程序从表中删除 我的问题是,我不知道如何获得我的remove_应用程序按钮的click事件,因为它是在DOM就绪后添加到DOM中的 不过,我使用了.on jQuery函数 这是我的密码:Javascript jQuery:如何通过id获取DOM就绪后在jQuery中创建的元素?,javascript,jquery,html,dom,Javascript,Jquery,Html,Dom,我是jQuery这个奇妙世界的一名程序员,今天我遇到了一个问题 我有一个应用程序列表,用户可以选择。要选择一个应用程序,他们必须单击一个按钮id=add_app{app_id}。当有人添加应用程序时,我会在表上创建一行,列出所有选定的应用程序。在jQuery中创建的这一行中,有一个按钮id=remove\u app\uu{app\u id}将应用程序从表中删除 我的问题是,我不知道如何获得我的remove_应用程序按钮的click事件,因为它是在DOM就绪后添加到DOM中的 不过,我使用了.on
jQuery(function() {
$('[id^=add_app_]').click(function() {
var app_id, version_id;
version_id = 0;
app_id = this.getAttribute('data-app_id');
$("#app_versions_" + app_id + " option:selected").each(function() {
version_id = $(this).val();
});
hide_app_from_selector(app_id);
display_app_in_table(app_id, version_id);
});
$('[id^=remove_app_]').on('click', function() {
// I NEVER GET HERE !
var app_id;
app_id = this.getAttribute('data-app_id');
remove_app_from_table(app_id);
display_app_in_selector(app_id);
});
});
简单回答:您使用事件委派
可以通过将选择器作为第二个参数传递给jQuery的.on来实现这一点
您应该使用最接近的共享父级,而不是document.body,以防止不必要的事件冒泡。您可以使用on方法将事件处理程序分配给动态创建的元素的祖先,该元素在首次调用该方法时存在。您只需使用$'[id^=remove\u app\]'即可完成的操作。在。。。正在将事件处理程序分配给调用时不存在的元素
要纠正这一点,请找到[id^=remove\u app\u]元素的祖先,该元素在您首次分配事件处理程序并分配给该事件处理程序时存在:
使用此特定代码,您可以将事件处理程序委托给body,该body可能在调用on函数之前就存在,而不是直接将其分配给动态创建的元素。发件人:
当提供选择器时,事件处理程序称为委派。当事件直接发生在绑定元素上时,不会调用该处理程序,而仅针对与选择器匹配的内部元素。jQuery将事件从事件目标冒泡到处理程序所连接的元素,即从最内层到最外层的元素,并沿与选择器匹配的路径为任何元素运行处理程序
为了使代码尽可能具有性能,您需要将委派分配给最近的祖先,而该祖先不是动态创建的,例如:
...
$'non-dynamic-container'。在'click'上,'[id^=remove_app_uuz]',函数{…};
$( document.body ).on( 'click', '[id^=add_app_]', function() {
});
$('body').on('click', '[id^=remove_app_]', function() { ... });