Javascript 上的jquery不响应clone()添加的元素
我的印象是jquery的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
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 () {