Javascript 在(';单击';)上,通过ajax向dom添加元素时不触发

Javascript 在(';单击';)上,通过ajax向dom添加元素时不触发,javascript,jquery,ajax,Javascript,Jquery,Ajax,因此,由于我使用了.on('click'),我认为这将处理动态添加到dom中的项,或者这是不正确的 当用户单击一个按钮时,我正在通过ajax将项目预先添加到元素中。但当我点击它关闭时,事件不会触发 处理这个问题的最佳方法是什么 $(".btn-close").on('click', function () { alert('click'); var win = $(this).closest("div.window"); var winID = win.attr("id"

因此,由于我使用了.on('click'),我认为这将处理动态添加到dom中的项,或者这是不正确的

当用户单击一个按钮时,我正在通过ajax将项目预先添加到元素中。但当我点击它关闭时,事件不会触发

处理这个问题的最佳方法是什么

$(".btn-close").on('click', function () {
    alert('click');
    var win = $(this).closest("div.window");
    var winID = win.attr("id");

    $(win).find("*").each(function () {
        var timerid = $(this).attr("data-timer-id");
        if (timerid != null || timerid != 'undefined') {
            window.clearInterval(timerid);
        }
    });

    if (winID != 'undefined' || id != null) {
        $('#' + winID).remove();
    }
});

请看一下('click','btn close',function(){也许有一条注释可以解释为什么/如何工作。需要注意的是,在DOM中如此高的级别进行委托是完全没有效率的。最好使用最接近的父容器(可能是ajax内容附加到的容器)作为委托的容器。可以理解的是,OP没有发布他们的HTML结构,因此这是我们根据问题的上下文所能做出的最好假设。谢谢。并且@War10ck I确实从body改为“#mainContentArea”这是在提供的点击功能中。@ammarcs你是对的,我必须解释,War10ck是对的。但是当我解释这个问题时,它已经被Tushar复制了。这解释了我们为什么使用它的每一个细节。我用参考链接编辑了我的答案。谢谢:-)@War10ck谢谢解释:-)
$('body').on('click', '.btn-close' , function(){})