【问题标题】:How to submit especific group of form inputs using ajax如何使用 ajax 提交特定的表单输入组
【发布时间】:2015-04-28 00:56:36
【问题描述】:

我不需要提交所有内容,只需提交参考是选择输入的修改输入组。我正在尝试使用 jQuery 过滤器和serializeArray() 来解决它,但它不起作用。我必须使用 ajax 来做到这一点。

我在 php 循环中的表单,其中包含来自数据库的数据

<form method="post" action="" id="resultado_trabalhos" name="resultado_trabalhos">

    <?php do { ?>
<select name="status_trabalho[]" id="status_trabalho<?php echo $row_listaTrabalhos['id_usuario']; ?>">
<option value="3" <?php if (!(strcmp(3, $row_listaTrabalhos['status_trabalho']))) {echo "selected=\"selected\"";} ?>>em avaliação</option>
<option value="4" <?php if (!(strcmp(4, $row_listaTrabalhos['status_trabalho']))) {echo "selected=\"selected\"";} ?>>oral</option>
<option value="5" <?php if (!(strcmp(5, $row_listaTrabalhos['status_trabalho']))) {echo "selected=\"selected\"";} ?>>poster</option>
<option value="6" <?php if (!(strcmp(6, $row_listaTrabalhos['status_trabalho']))) {echo "selected=\"selected\"";} ?>>não selecionado</option>
</select>

<textarea name="motivoDevolucao[]" id="motivoDevolucao<?php echo $row_listaTrabalhos['id_trabalho']; ?>" cols="100" rows="2" wrap="physical" style="display:none;">&nbsp;</textarea>

  <input type="hidden" id="id_autor<?php echo $row_listaTrabalhos['id_usuario']; ?>" name="id_autor[]" value="<?php echo $row_listaTrabalhos['id_usuario']; ?>" />
   <input type="hidden" id="token_trabalho<?php echo $row_listaTrabalhos['id_usuario']; ?>" name="token_trabalho[]" value="<?php echo $row_listaTrabalhos['token_submissao']; ?>" />
   <input type="hidden" id="marcadorStatus<?php echo $row_listaTrabalhos['id_usuario']; ?>" name="marcadorStatus[]" value="<?php echo $row_listaTrabalhos['status_trabalho']; ?>" />
   <input type="hidden" id="nome<?php echo $row_listaTrabalhos['id_usuario']; ?>" name="nome[]" value="<?php echo $row_listaTrabalhos['nome_usuario'] . " " . $row_listaTrabalhos['sobrenome_usuario']; ?>" />
   <input type="hidden" id="email_usuario<?php echo $row_listaTrabalhos['id_usuario']; ?>" name="email_usuario[]" value="<?php echo $row_listaTrabalhos['email_usuario']; ?>" />

    <?php } while ($row_listaTrabalhos = mysqli_fetch_assoc($listaTrabalhos)); ?>
  </form>

marcadorStatus[] 这是我与选择输入 status_trabalho[] 进行比较的锚。

我想serializeArray()marcadorStatus[] != status_trabalho[] 类似。因此,如果是true,则只提交具有相同数组索引的输入组(id_autor[]nome[]email_usuario[] 等)。

【问题讨论】:

  • 感谢您的帮助,@cchacholiades!

标签: php jquery ajax filter serializearray


【解决方案1】:

我认为您不需要输入元素都具有id 值。如果没有,最好不要使用它们;浏览器的工作量更少。

而是给他们一个分组他们的类。

现在我不会编写 PHP,所以你可能不得不将其视为伪代码:

<form method="post" action="" id="resultado_trabalhos" name="resultado_trabalhos">
<? $i = 0; ?>
<?php do { ?>
    <select class="group-<?php echo $i; ?>" name="status_trabalho[]" data-group-index="<?php echo $i; ?>">
        <option value="3" <?php if (!(strcmp(3, $row_listaTrabalhos['status_trabalho']))) {echo "selected=\"selected\"";} ?>>em avaliação</option>
        <option value="4" <?php if (!(strcmp(4, $row_listaTrabalhos['status_trabalho']))) {echo "selected=\"selected\"";} ?>>oral</option>
        <option value="5" <?php if (!(strcmp(5, $row_listaTrabalhos['status_trabalho']))) {echo "selected=\"selected\"";} ?>>poster</option>
        <option value="6" <?php if (!(strcmp(6, $row_listaTrabalhos['status_trabalho']))) {echo "selected=\"selected\"";} ?>>não selecionado</option>
    </select>

    <textarea class="group-<?php echo $i; ?>" name="motivoDevolucao[]" cols="100" rows="2" wrap="physical" style="display:none;">&nbsp;</textarea>

    <input type="hidden" class="group-<?php echo $i; ?>" name="id_autor[]" value="<?php echo $row_listaTrabalhos['id_usuario']; ?>" />
    <input type="hidden" class="group-<?php echo $i; ?>" name="token_trabalho[]" value="<?php echo $row_listaTrabalhos['token_submissao']; ?>" />
    <input type="hidden" class="group-<?php echo $i; ?>" name="marcadorStatus[]" value="<?php echo $row_listaTrabalhos['status_trabalho']; ?>" />
    <input type="hidden" class="group-<?php echo $i; ?>" name="nome[]" value="<?php echo $row_listaTrabalhos['nome_usuario'] . " " . $row_listaTrabalhos['sobrenome_usuario']; ?>" />
    <input type="hidden" class="group-<?php echo $i; ?>" name="email_usuario[]" value="<?php echo $row_listaTrabalhos['email_usuario']; ?>" />

    <? ++$i; ?>
<?php } while ($row_listaTrabalhos = mysqli_fetch_assoc($listaTrabalhos)); ?>
</form>

至于 ajax 调用,我想你想使用.serialize(),而不是.serializeArray()

$('#resultado_trabalhos').submit(function(e) {
    e.preventDefault();

    var $form = $(this);

    // This will hold the input elements to be submitted.
    var inputs = [];

    // Add any inputs that should always be submitted.
    inputs.push.apply(inputs, $form.find('.always-submit').get());

    // Loop through all the "status_trabalho[]" selects.
    $form.find('select[name="status_trabalho[]"]').each(function() {
        var $select = $(this);
        // Check if the select value was changed.
        if ($select.val() != $select.nextAll('input[name="marcadorStatus[]"]:first').val()) {
            // Push all the inputs from the group onto the "inputs" array.
            inputs.push.apply(inputs, $form.find('.group-' + $select.attr('data-group-index')).get());
        }
    });

    $.ajax({
        type: 'post',
        url: 'someUrl',
        data: $(inputs).serialize(),
        // ...
    });
});

【讨论】:

  • 我不知道为什么,但我在这一行出现错误inputs.push.apply(inputs, $form.find('.group-' + $(select.attr('data-group-index')).get());
  • @RenatoPirei - 那行有一个额外的左括号。它应该是$select.attr,而不是$(select.attr。我已经更新了答案中的代码。
  • 现在它返回一个空字符串...$(inputs).serialize( )。我正在使用var test = $(inputs).serialize( ) 进行测试并使用console.log(test) 显示
  • @RenatoPirei - 我创建了这个jsfiddle 来测试代码,它似乎可以工作。您生成的 HTML 是否与 jsfiddle 中的内容匹配?
  • 我现在正在测试。但是,我还有一个疑问。如果我必须发送不属于该组的其他输入...例如保存区域以更新 DB 上的此字段的输入?
猜你喜欢
  • 2013-01-06
  • 2013-04-25
  • 1970-01-01
  • 1970-01-01
  • 2021-10-19
  • 2013-05-19
  • 1970-01-01
  • 1970-01-01
  • 2013-03-14
相关资源
最近更新 更多