【问题标题】:Jquery get all input values and create an array (with names)Jquery 获取所有输入值并创建一个数组(带有名称)
【发布时间】:2010-12-19 21:08:23
【问题描述】:

嘿伙计们,我正在做一些我收集大量表格的工作。似乎这些不是“发布”的传统方式(即使用提交按钮)。单击链接时,我需要一种方法来收集所有表单数据的所有名称和值(然后使用 document.location 进行重定向)。

我希望名称保持不变,以便我可以使用简单的 PHP 脚本来处理数据。

有什么建议吗?

【问题讨论】:

    标签: php javascript jquery forms


    【解决方案1】:

    我可以建议Serialize Form to JSON

    $.fn.serializeObject = function()
    {
       var o = {};
       var a = this.serializeArray();
       $.each(a, function() {
           if (o[this.name]) {
               if (!o[this.name].push) {
                   o[this.name] = [o[this.name]];
               }
               o[this.name].push(this.value || '');
           } else {
               o[this.name] = this.value || '';
           }
       });
       return o;
    };
    

    然后你可以这样做:

    var formArray = $("#myform").serializeObject();
    

    【讨论】:

      【解决方案2】:
      $.fn.valuesArr = function()
      {
          var a = [];
          jQuery.each(this, function(i, field){
              a.push($.trim(field.value));
          });
          return a;
      }
      

      使用:

      var myArr = $('input', $parentJQelem).valuesArr();
      

      【讨论】:

        【解决方案3】:

        您可以使用我的提交助手之类的东西作为基础

        function submit(form) {
          var form = $(form);
          $.ajax(
            { data: $.param( form.serializeArray()),
              dataType:'script',
              type:'post',
              url: form.attr("action")});
        }
        

        我会使用 'serialize()' 而不是 'serializeArray()',而不是使用 ajax 发布它,你可以做任何你想做的事情。

        对不起,现在没有更多时间,但希望这个 sn-p 可以帮助你。

        【讨论】:

        • 我认为 $.param 和 form.serializeArray() 的组合是关键。不序列化:)。但我不确定。
        【解决方案4】:

        cletus 的回答在效率方面是最好的。

        然而,这是另一个不依赖 JSON 的可行解决方案:

        //this is my object I will fill my array with
        function myObject(name, value)
        {
            this.name = name;
            this.value = value;
        }
        
        var arr = $.map(
            $('span'), function (item) {
               var $item = $(item); //no need to $(item) 2 times
               return new 
                 myObject(
                   $item.attr("name"),     //name field
                   $item.text()            //value field
                 );
            }
        );
        

        arr 将是一个myObject 的数组,每个数组都包含一个name 属性和一个value 属性。

        使用您的选择器代替$('span')

        【讨论】:

          【解决方案5】:

          但是所有这些函数都不能在输入中使用数组名称。

          示例 -

          这对于提交表单是正确的,但是在序列化时我得到了

          表格[类型[]]:2

          这是不正确的 - 我需要 - form[type][]:2

          【讨论】:

            猜你喜欢
            • 2012-10-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-09-05
            • 2015-07-13
            相关资源
            最近更新 更多