0

好的,我正在尝试为自己创建一个可重用的函数,我最终可以返回给定容器(例如 div 或特定表单)中所有表单元素的对象。但是,我似乎坚持将实际的容器/表单传递给我的函数,以便它可以在元素上运行。

目前我有:

function findAllFormElements(formElem)
{
    //detect all form elemets on the page in a given form/container
    formObj = {};
    $(formElem ':input').each(function(key, val)
    {
        $(document).append(val+'<br>');
    });
    console.log(formObj);
}

其中formElem预计是包含元素/表单元素,即:

<div class="something">
   <input type="text">
   <input type="text">
   <input type="text">
   <input type="text">
   <select>
     <option></option>
   </select>
   <textarea></textarea>
</div>

或者

<form class="something">
   <input type="text">
   <input type="text">
   <input type="text">
   <input type="text">
   <select>
     <option></option>
   </select>
   <textarea></textarea>
</form>

从长远来看,两者都是可接受的容器类型,因为该项目中的某些表单实际上没有表单标签。

授予它我当前的示例并没有完全描述我想要说的内容,因为它会将内容吐出到控制台,并将它们附加到document最终结果,但一旦我知道如何formElem正确传递参数,我就可以获得所有输入类型从直接<input>标签到<select>,textarea将是所有表单元素的对象,其中 id/name 是对象的键,如果有值的话。无论哪种方式,都只是想弄清楚这种捕获的最佳策略是什么。所以我可以遍历元素并获取这些信息。

4

1 回答 1

0

使用 jQuery .serializeArray(),我们可以轻松地抓取这些<form>元素并从中创建一个对象......

$('form').serializeArray(); // will turn into a key/value object

由于您希望对某些<div>集合进行序列化,只需执行以下操作:

//turn that div (filled with inputs) into a form element
var tempForm = $('<form />', { html: $('#yourDiv').html() });

var objResult = tempForm.serializeArray(); // now serialize

jsFiddle 演示

于 2012-12-11T22:13:19.037 回答