【问题标题】:How to send multiple checked values to db and append value to each object?如何将多个检查值发送到数据库并将值附加到每个对象?
【发布时间】:2018-02-18 18:09:33
【问题描述】:

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

该表格用于登记资产损失,因此与唯一资产“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>

【问题讨论】:

    标签: javascript node.js ajax forms checkbox


    【解决方案1】:

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

    HTML 代码:

    <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[]"时,它会在@987654327上保存数组@键。

    查看此article 了解详细说明和示例。

    更新答案: 根据 cmets 中给出的详细信息,请按照以下代码进行解决。

    我们可以通过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
      });
    });
    

    【讨论】:

    • 我可能应该补充一点,我正在使用节点。你知道我是否可以使用相同的技术吗?我尝试将 [] 添加到名称中,但仍然不确定如何使用 node.js 来使用它。但无论如何我都会通读这篇文章,可能会有一些我可以在那里使用的帮助。谢谢
    • 谢谢!这看起来与我试图实现的目标相似
    • 谢谢,太好了。感谢您的帮助!
    • 乐于助人:)
    猜你喜欢
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    相关资源
    最近更新 更多