Javascript jQuery:如何通过id获取DOM就绪后在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这个奇妙世界的一名程序员,今天我遇到了一个问题

我有一个应用程序列表,用户可以选择。要选择一个应用程序,他们必须单击一个按钮id=add_app{app_id}。当有人添加应用程序时,我会在表上创建一行,列出所有选定的应用程序。在jQuery中创建的这一行中,有一个按钮id=remove\u app\uu{app\u id}将应用程序从表中删除

我的问题是,我不知道如何获得我的remove_应用程序按钮的click事件,因为它是在DOM就绪后添加到DOM中的

不过,我使用了.on jQuery函数

这是我的密码:

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() { ... });