如何将多个选中的值发送到db并将值附加到每个对象?

时间:2018-02-18 18:09:33

标签: javascript node.js ajax forms checkbox

我有一个带复选框的表单。可以选择一个或多个发送到db。

该表格用于登记资产损失,因此与" current_id"有关系。这是独一无二的资产。 1:n关系。 因为我需要将current_id作为外键发送,所以我将它推送到表单数组上 像这样formData.push({name: 'id', value: current_id});

只选择一个复选框时,此方法正常。 但是当我检查了多个选项时,我无法发送到服务器。 我很难解决这个问题。我已经研究过使用map,但我不知道如何实现它以将正确的数组发送到数据库。

非常感谢帮助



$('form').submit(function(e){
  e.preventDefault();
  let formData = $(this).serializeArray();
  
  formData.push({name: 'id', value: current_id});
});

$.post({
  type: 'POST',
  url: '/api',
  data: formData
})

// what i tried..
// for multple checked boxes
// this did not work

//formData.forEach(function (data){
//  data.push({name: 'id', value: current_id});
//  $.post({
//    type: 'POST',
//    url: '/api',
//    data: formData
//  })
//})

<form id="damages">
  <input type="checkbox" name="damage" value="loose" checked="checked" />
  <input type="checkbox" name="damage" value="broken" />
</form>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

您必须在复选框名称后使用[]。在PHP代码中,只需var_dump($_POST['damage']);即可获得数组值。

HTML CODE:

<form id="damages">
  <input type="checkbox" name="damage[]" value="loose" checked="checked" />
  <input type="checkbox" name="damage[]" value="broken" />
</form>

说明:当您提供name="damage"时,它只会对damage键保留一个值,但当我们给出name =“damage []”时,它将会保留对damage键的数组。

查看此article以获取详细说明和示例。

更新回答: 根据评论中提供的详细信息,请按照以下代码进行解决。

我们可以通过map()功能获取所选复选框的列表,然后将其推送到formData

$('form').submit(function(e){
  e.preventDefault();
  let formData = $(this).serializeArray();
  var selectedIds = $("input:checkbox:checked").map(function () {
    return $(this).val();
  }).get();

  formData.push({name: 'id', value: current_id});
  formData.push({name: 'selectedIds', value: selectedIds});
  $.post({
      type: 'POST',
      url: '/api',
      data: formData
  });
});