Javascript 上的jquery不响应clone()添加的元素

Javascript 上的jquery不响应clone()添加的元素,javascript,jquery,Javascript,Jquery,我的印象是jquery的on()对动态添加到dom中的事件附加元素(通过ajax或克隆等)做出了反应。但是,以下内容仅适用于页面加载时附加到dom的元素。我使用clone()制作的另一个副本没有得到很好的处理 $(document).ready(function () { $('.ship_via_dropdown').on('change', function () { console.log($(this)); if ($(this).hasClass

我的印象是jquery的
on()
对动态添加到dom中的事件附加元素(通过ajax或克隆等)做出了反应。但是,以下内容仅适用于页面加载时附加到dom的元素。我使用
clone()
制作的另一个副本没有得到很好的处理

$(document).ready(function () {
    $('.ship_via_dropdown').on('change', function () {
        console.log($(this));
        if ($(this).hasClass('prev_change')) {
            console.log('has');
        } else {
            $(this).addClass('prev_change');
            console.log('hasn\'t');
        }
    });
});
克隆代码:

$(document).ready(function(){
    var form1 = $('.line_item_wrapper').children().clone(); 
    $('#new_line_content_1').html(form1);
});
用于下拉列表的HTML(jquery db query在文档就绪时添加的内容)



感谢您的任何见解

或者委派事件:

$(document).on('change', '.ship_via_dropdown', function () {
    console.log($(this));
    if ($(this).hasClass('prev_change')) {
        console.log('has');
    } else {
        $(this).addClass('prev_change');
        console.log('hasn\'t');
    }
});
或者更好的方法是,使用来克隆事件。(注意:只有在附加事件处理程序后进行克隆时,此操作才有效。)

更改此行:

$('.ship_via_dropdown').on('change', function () {
为此:

$(document).on('change',".ship_via_dropdown", function () { 
jquery的
on()
对动态添加的事件附加元素作出反应


不,或者至少,除非你。确实总是将事件委托给
文档

,但不是以您认为的方式。当按您使用过的方式使用时:

$('.ship_via_dropdown').on('change',
它实际上与使用
.change()
没有什么不同。你要找的是。其形式如下:

$("<selector to static ancestor>").on('change', '.ship_via_dropdown', function () {
$(“”)。在('change','上。通过_下拉菜单发送_',函数(){

其中,
是动态添加元素的静态祖先的选择器。(不是动态创建的)作为最后手段,这里可以使用
文档
。但是为了性能,这应该是最接近的静态祖先元素。

是否愿意在进行克隆的地方共享代码?@Adrian Yes!给我两秒钟。您读过文档了吗?请注意,对于性能而言,委派文档并不总是最佳选择,通常是重新记录建议改为委托给最近的共同祖先。
document
应仅在没有更合适的祖先元素时使用。@David是的,但(a)我没有要查看的HTML,以及(b)在现实世界中,这样做很少会出现性能问题。@Blazemonger我不是说你的答案是错误的,只是添加了有用的信息。这需要与$(文档)结合使用吗?以某种方式准备好了吗?还是简单的$(文档)与on()结合使用注意这一点。非常感谢。@thomas是的,当然有。我刚刚建议了一个快速替换。我知道了。它似乎在没有
$(document.ready()的情况下工作
所以我只是检查一下。再次感谢!@thomas你说得对,在这种情况下不需要
就绪
。处理程序被附加到
文档
本身,因此无需等待
文档
的内容就绪。
$("<selector to static ancestor>").on('change', '.ship_via_dropdown', function () {