Javascript Jquery附加到多次复制内容

Javascript Jquery附加到多次复制内容,javascript,jquery,html,ajax,Javascript,Jquery,Html,Ajax,每次使用JQuery的AppendTo()时,它都会复制要追加的项。每次我用AJAX(包括脚本)加载页面时,它会复制更多次!它只有在重新加载整个页面后第一次正常工作 $("<tr><td><input name='quantity[]'/></td><td><input type='text' name='ItemDescription[]'/></td><td><span class='rem

每次使用JQuery的AppendTo()时,它都会复制要追加的项。每次我用AJAX(包括脚本)加载页面时,它会复制更多次!它只有在重新加载整个页面后第一次正常工作

$("<tr><td><input name='quantity[]'/></td><td><input type='text' name='ItemDescription[]'/></td><td><span class='remove'>X</span></td></tr>")
    .appendTo('.tbody');

同样的问题依然存在。

在执行追加过程之前,尝试先复制一份副本

var copy = $('.tbody').html(); //This should be done initially before making any calls
$('.tbody').html(copy + 'string');
这样您就不会重复追加元素。

当您使用append()时,它将追加到现有的正文中(顺便说一句,我不知道为什么要在正文中追加一行。这应该追加到表中)。因此,如果第二次调用append(),将有两行。append()就是这样做的。如果要在每次加载后重新设计表,则必须使用清除所有现有行

$('.tbody').html("");

但是最好在正文中使用一个表,并将行附加到表中,然后清除该表。

根据您的描述,看起来您正在运行多次注册事件处理程序的脚本。最好的解决办法是不要这样做(只运行一次脚本)

如果要处理动态元素,请查看事件委派

如果这是不可能的,另一个解决方案是在添加新处理程序之前删除任何处理程序,以便在任何给定时间只有一个处理程序。您还可以使用事件名称空间来确保不会删除其他一些处理程序

$('some-selector').off('click.duplicate').on('click.duplicate', function(){})

到底是什么问题?你能描述一下你想做什么吗。从第一个代码示例的外观来看,您试图向表中添加新行,但我看不出有任何问题。@Rorymcrossan我认为op只想将元素与目标元素一起附加一次。他使用的代码将允许复制元素,因为
$('.tbody')
也将包含前面附加的元素。我说得对吗?这正是我想要做的。它可以工作,问题是,当脚本启动时,它会向表中添加多行。但我只想要一行。是的@RajaprabhuAravindasamylooks就像你有重复的事件处理程序一样。。你能展示一下你的事件处理程序是如何注册的吗where@downvoter我错过什么了吗?你能告诉我原因吗?这样我才能纠正它。谢谢,谢谢,但技术上我已经试过了。在我文章的底部,我说我做了和你一样的事情,除了你把tbody的html存储在一个变量中,我只是直接把它插入函数中。我两种方法都试过了,结果都一样。@user2993497您没有正确获得它。我只是要求你从一开始就保存一份副本
var copy
应该像常量一样对待,并且应该在页面加载本身中为它分配相关的html字符串。是的,我尝试了这个,但结果相同。真正的问题是触发函数的事件被多次触发。
$('some-selector').off('click.duplicate').on('click.duplicate', function(){})