jQuery正在复制POST请求?

jQuery正在复制POST请求?,jquery,ajax,forms,post,Jquery,Ajax,Forms,Post,我制作了一个网页,通过jQuery将数据发送到一个页面。单击“新建”可以复制该表单。由于某些原因,提交功能会运行多次。如果我创建了三个表单,并在第一个表单上单击Submit,它将为此创建三个条目。然后删除该表单。当我提交第二个表单时,它会有两个条目,以此类推 谁能告诉我下面的代码有什么问题吗 function listen() { $(".addBook").on('click', function() { $(this).fadeOut("fast", function() {

我制作了一个网页,通过jQuery将数据发送到一个页面。单击“新建”可以复制该表单。由于某些原因,提交功能会运行多次。如果我创建了三个表单,并在第一个表单上单击Submit,它将为此创建三个条目。然后删除该表单。当我提交第二个表单时,它会有两个条目,以此类推

谁能告诉我下面的代码有什么问题吗

function listen() {
$(".addBook").on('click', function() {
    $(this).fadeOut("fast", function() {
        $(this).parent().find(".loadingImg").fadeIn();
    });
    var target = $(this).parent();
    var title = $(target).find(".bookTitle").val();
    var author = $(target).find(".bookAuthor").val();
    var genre = $(target).find(".bookGenre").val();
    var barcode = $(target).find(".bookBarcode").val();
    var img = encodeURIComponent($(target).find(".coverSelect").val());
    var data = 'barcode=' + barcode + '&title=' + title + '&author=' + author + '&genre=' + genre + '&img=' + img;
    $.post('addBook', data, function() { alert(title); });
    $(this).parent().parent().slideUp("med", function() {
        $(this).remove();
    });
});
}


//new form function
function newBook(barcode) {
var data = 'barcode=' + barcode;
$.post('bookInfo', data, function(data) {
    $('.accordion').append(data);  //php script returns html for form
    $('.accordion > dd').hide();
    $("#closeAccordion").show();
    listen();
});
}

谢谢

生成新表单时,可能会绑定该按钮。 当您这样做时,您将把同一事件绑定到一个已经附加了单击事件的按钮。 然后,当您单击时,所有事件都将运行

使用“单击”或“单击”。。。防止这种行为


可能是在生成新表单时绑定了该按钮。 当您这样做时,您将把同一事件绑定到一个已经附加了单击事件的按钮。 然后,当您单击时,所有事件都将运行

使用“单击”或“单击”。。。防止这种行为


对于最旧的jquery,您可以使用live和on'click'解决方案,但在此之前,您还需要使用die和unbind终止绑定

在1.9+jquery版本中,live。。。语法替换为on。。。语法。 请记住升级/更改内容

在。。语法用法:

 $("#myButton").on("click", function(){
    alert("you call me!");
});

关于旧的绑定方法,您可以找到一些文档的

,使用最旧的jquery,您可以使用live和on'click'解决方案,但在此之前,您还需要使用die和unbind终止绑定

在1.9+jquery版本中,live。。。语法替换为on。。。语法。 请记住升级/更改内容

在。。语法用法:

 $("#myButton").on("click", function(){
    alert("you call me!");
});

关于旧的绑定方法,您可以找到一些文档

您正在绑定重复的事件,而只需使用事件委派,这样您甚至不需要调用listen

注: 您应该使用选择器来替换文档,该选择器可以选择要将表单附加到的任何元素,例如.accordion


您正在绑定重复的事件,而只需使用事件委派,这样您甚至不需要调用listen

注: 您应该使用选择器来替换文档,该选择器可以选择要将表单附加到的任何元素,例如.accordion


我们需要查看html和新表单以及删除表单功能。给定的代码将使用与之匹配的html。如果复制整个表单,是否意味着标记为.addBook的按钮/链接也会复制?如果是这种情况,那么当您单击an.addBook项时,它将激发页面上所有类为.addBook的项。只是一个猜测,这就是我为什么不回答这个问题的原因。需要根据@KevinB的评论查看更多信息。当您单击an.addBook项时,它将激发页面上所有class.addBook项的信息。什么绝对不是。你能证实这个说法吗?关于:var target=$this.parent;var title=$target.find.bookTitle.val;。。。目标已经是jQuery对象,您不需要在下一行中再次包装它。@JasCav这不是真的,它只会为单击的元素激发。单击只发生在一个元素上。我们需要查看html和新表单以及删除表单功能。给定的代码将使用与之匹配的html。如果复制整个表单,是否意味着标记为.addBook的按钮/链接也会复制?如果是这种情况,那么当您单击an.addBook项时,它将激发页面上所有类为.addBook的项。只是一个猜测,这就是我为什么不回答这个问题的原因。需要根据@KevinB的评论查看更多信息。当您单击an.addBook项时,它将激发页面上所有class.addBook项的信息。什么绝对不是。你能证实这个说法吗?关于:var target=$this.parent;var title=$target.find.bookTitle.val;。。。目标已经是jQuery对象,您不需要在下一行中再次包装它。@JasCav这不是真的,它只会为单击的元素激发。单击仅发生在一个元素上。
$('.accordion').on('click', '.addBook', function() {....