【问题标题】:Jquery Each FunctionJquery 每个函数
【发布时间】:2014-04-04 05:49:42
【问题描述】:

我正在尝试使用 each 函数发布多个字段,我所拥有的是我的常规字段,它们可以很好地提交并添加到数据库中。

当用户接近填写表单和一个提交按钮时克隆字段的功能。

我正在尝试使用 $.ajax 为页面上的每个表单提交一次来自值,它似乎只适用于第一个表单,没有添加任何重复的表单数据,这让我想我可能我正在使用 .each 错误有人可以解释我在这种情况下如何使用它吗?这是我的尝试

$(function(){
 var i = 0;             var x = 0;
  $.datepicker.setDefaults($.datepicker.regional['']);
  $.datepicker.formatDate( "yy-mm-dd");
  $('#datepicker' ).datepicker();
  $('.vat').each(function(i){
        $(this).click(function(){

        var id = "batchinvoice" + x.toString();
        $('#batchinvoice').clone().attr("name", id).appendTo(".panel-body");
        x++;
                });
});

  $('#submit').click(function(){
    var propid = Array();
    var date = Array();
    var ref= Array();
    var id= Array();
    var desc= Array();
    var vat= Array();
    var net= Array();
$('#batchinvoice[name*="batchinvoice"]').each(function(i){


    propid[i] = $('#sl_propid').val();
    date[i] = $('.sl_date datepicker').val();
    ref[i] = $('#sl_ref').val();
    id[i] = $('#sl_nom_id').val();
    desc[i] = $('#sl_desc').val();
    vat[i] = $('#vat').val();
    net[i] = $('#sl_net').val();
     i++;
 });

$.ajax({
    type: 'POST',
    url: '<?php echo base_url(); ?>FinancialInput/addInvoiceToLedger',
    data: { propid : propid, date:"date", ref: ref, id: id, desc: desc, vat: vat, net: net},
    sucess: function(e){
        alert(e.error);
        },
    error: function(e){
        alert(e.error);
        }    
    });

    });
});

.vat 是触发克隆的字段 #submit 是一个提交按钮,.batchinvoice 是每个克隆表单(和原始表单)的类。

我所阅读的所有内容都是基本教程,任何帮助表示赞赏,阅读干杯:)

JSFiddle

【问题讨论】:

  • 你能给我们提供一个代码吗,包括HTML部分
  • 当然,一开始就应该这样做,抱歉哈哈,现在就整理一下吧:)

标签: javascript php jquery ajax forms


【解决方案1】:

请参阅下面代码中的 cmets,问题是您对 id 的使用不当。
http://jsfiddle.net/3Dq2A/4/

这个:

$('#batchinvoice[name*="batchinvoice"]')

应该只返回一条记录,因为它基于 id。

这可以工作:

$('form[name*="batchinvoice"]')

但我更喜欢

$('form.batchinvoice')

使用 body click 发送 ajax-post 和 "vac" 输入以添加新表单

【讨论】:

  • 现在只是将最后一个字段的数据输入数据库,仍然卡在同样的问题,我改变了表单的类,并尝试了 $('form.batchinvoice') 和 $( 'form[name*="batchinvoice"]'),但我的问题在于选择器,所以'将开始一个新问题,谢谢你的时间。
  • 您可以检查您的控制台日志以验证对象是否格式正确。
【解决方案2】:

您绝对不想要的是循环中的 ajax 调用。 Jquery ajax call within an each loop

你想要的是:

    var propid = Array(),
    date = Array(),
    refe= Array(),
    id= Array(),
    desc= Array(),
    vat= Array(),
    net= Array();
    $('.batchinvoice').each(function(i){
        propid[i] = $('#sl_propid').val();
        date[i] = $('#sl_date').val();
        refe[i] = $('#sl_ref').val();
        id[i] = $('#sl_nom_id').val();
        desc[i] = $('#sl_desc').val();
        vat[i] = $('#vat').val();
        net[i] = $('#sl_net').val();
     }
        $.ajax({
        type: 'POST',
        url: '<?php echo base_url(); ?>FinancialInput/addInvoiceToLedger',
        data: { propid : propid, date: date, refe: refe, id: id, desc: desc, vat: vat, net: net},
        sucess: function(e){
            alert(e);
            },
        error: function(e){
            alert(e);
            }    
        });

【讨论】:

  • 嘿,谢谢,我现在明白你的意思了,但是那个代码仍然不起作用,它有错误,我更正了,但它仍然只提交一次。
  • 这就是你得到一个提交但所有数据都在里面,做一个 print_r($_POST);你会看到答案的。
  • 对不起,我认为我不够清楚,它确实返回了一个数组,我在其中循环遍历它并将它们添加到数据库中,但它正在添加相同的记录(第一种形式)再说一遍,我认为这可能与选择器有关?
  • 回答这个问题:“我认为这可能与选择器有关” 我们显然需要 HTML。这段代码仍然很奇怪,为什么要使用 each 并选择 #ids。 Id = identifiant 你不能有两次相同的 id。我的观点是你应该避免在循环中进行 ajax 调用仍然是可行的。
  • 在最初的问题中已经有一段时间了,在 JS Fiddle 链接中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-16
  • 2016-12-21
  • 2011-06-07
  • 2018-12-29
  • 2010-11-21
  • 2013-12-01
  • 2015-07-17
相关资源
最近更新 更多