【问题标题】:How to aggregate checkbox values into one value to post form Jquery如何将复选框值聚合为一个值以发布表单 Jquery
【发布时间】:2016-12-11 06:23:25
【问题描述】:

有没有办法通过表单发布将值作为一个参数发布?

我有一个包含多个复选框组的表单,用户可以在其中选择多个选项。

<form id="form" action="url" method="post">
<input type="checkbox" name="option" id="first" value="1">
<input type="checkbox" name="option" id="first" value="2">
<input type="checkbox" name="option" id="first" value="3">
<input type="checkbox" name="option" id="first" value="4">

<input type="checkbox" name="option2" id="second" value="1">
<input type="checkbox" name="option2" id="second" value="2">
<input type="checkbox" name="option2" id="second" value="3">
<input type="checkbox" name="option2" id="second" value="4">

<input type="submit" name="submit" id="button">

我还编写了一些 Jquery,它连接每个名称的值并用逗号分隔它们,这样输出看起来像这样,我可以通过控制台看到它:

$("form").submit(function(){
        var arr=[];
        $('input:checked[name="option"]').each(function(){
        arr.push($(this).val());
            });

            $('#first').val(arr.join(','));
            console.log('#first').val();
        });

Console.log 输出:

option: 1,2,3,4 

但是,当我提交表单时,值会像这样(解析的版本)分开传递,并且不使用我编写的 Jquery 代码。

option: 1
option: 2
option: 3
option: 4

实际的查询字符串如下所示:

option=1&option=2&option=3&option=4

我想要完成的是参数被聚合或分组,以便最终输出看起来像这样

option=1,2,3,4&option2=1,2,3,4...

我不确定为什么它不使用 Jquery 写入值

【问题讨论】:

  • 你的ajax在哪里?此外,您有多个具有相同 ID 的元素。而不是改变$("#first").val() 你应该将它存储在一个变量中
  • 我没有使用 AJAX,它必须通过 POST。
  • 当您提交表单时,在表单的action 属性中标识的页面会被加载,并且该页面存储在内存中的每个值都会消失。即使不是这样,Javascript 变量和表单字段也是两个完全不相关的东西。
  • 这听起来有点像您正在尝试在提交表单之前和之后处理表单数据。为什么要加倍工作?为什么不合并接收表单数据的页面上的值(由action 属性标识的值)?

标签: jquery forms post


【解决方案1】:

这有点难看,但是如果你想组合复选框的值,而不是在处理表单action 的页面上的请求数据中看到它们,我会创建两个新的&lt;input type="hidden" 字段.然后,当您使用 jQuery 处理表单的提交时,您可以将其他字段的值组合为关联隐藏字段的值。最后,在表单提交完成之前删除您不想在处理页面上看到的字段:

$(function() {
  $("#form").submit(function() {
    var optionCount = 0;
    var optionValue = "";
    $("input[name=option]:checked").each(function() {
      if (optionCount > 0) optionValue += ",";
      optionValue += $(this).val();
      optionCount++;
    });

    $("#option").val(optionValue);

    var optionCount = 0;
    var optionValue = "";
    $("input[name=option2]:checked").each(function() {
      if (optionCount > 0) optionValue += ",";
      optionValue += $(this).val();
      optionCount++;
    });
    $("#option2").val(optionValue);

    $("input:checkbox").remove();
  });
  $("#received").html(decodeURIComponent(window.location.search));
});

示例

注意

  • 您不能像在原始示例代码中那样拥有多个具有相同 id 的字段。

【讨论】:

    【解决方案2】:

    这不是最好的实现方式,最好通过AJAX进行POST调用并将选项作为参数发送。

    在表单中添加隐藏输入。

    &lt;input type="hidden" id="checkedValues" value=""&gt;

    把你的js改成这样:

    $("form").submit(function(){
         var arr=[];
         $('input:checked[name="option"]').each(function(){
            arr.push($(this).val());
         });
    
         $('#checkedValues').val(arr.join(','));
         console.log($('#checkedValues').val());
    });
    

    【讨论】:

    • 问题是当前系统需要使用他们的表单发布,因为初始表单被写入只接受一个选项,否则整个代码将不得不重写以接受 AJAX 调用,因此我正在尝试找出一个解决方案,允许将参数作为一个而不是单独传递。
    • 是的,我有。它只为我解决了部分问题。 Vince 的答案似乎是我所需要的,因为它从实际提交中删除了复选框数据,因此它没有多个实例。
    【解决方案3】:

    您可以创建ajax POST 并向其提交您的数据类型。看下面的sn-p:

    $("form").submit(function(e) {
      e.preventDefault();
      var arr = [];
      $('input:checked[name="option"]').each(function() {
        arr.push($(this).val());
      });
      var myData = arr.join(',');
      $.ajax({
        'url': 'url',
        'type': 'POST',
        'data': {
          options: myData
        },
      });
      return false;
    });
    

    看到这个fiddle

    【讨论】:

    • 这是一个选项,但是它将需要重写我们当前的解决方案,该解决方案被编写为通过单选框接受一个选项,但随后决定允许多个选项,因此表单帖子等已经到位这就是为什么我正在寻找一种解决方案,该解决方案允许在选择时将表单发布参数聚合为一个与多个。
    猜你喜欢
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 2013-10-14
    • 1970-01-01
    • 2014-12-30
    相关资源
    最近更新 更多