使用jQuery的.serialize()时获取输入字段类型

时间:2012-06-23 18:44:09

标签: javascript jquery javascriptserializer

使用jQuery的$.serialize()$.serializeArray()来获取正在序列化的输入字段(它们的属性)类型是否可行?显然它会在标题中发送输入名称,但我想知道我是否可以抓住:textareainput type="text"input type="radio"

2 个答案:

答案 0 :(得分:1)

这个怎么样?

var allInputs = $("#myform *:input").map(function (i,e)
                     {
                         return {id: $(e).attr("id"),
                                 name: $(e).attr("name"),
                                 type: $(e).attr("type"),
                                 tag: $(e).get(0).tagName
                                };
                     }
                     );

请参阅http://jsfiddle.net/cranio/6uBLQ/

它给出了一个具有以下形式的对象:

[{id: "c", name: "x" tag: "TEXTAREA" type: undefined},
{id: "a", name: "z", tag: "INPUT", type: "text"}, 
{id: "b", name: "y", tag: "INPUT", type: "hidden"},
...]

由此您可以使用其ID引用输入,根据标记和/或类型执行不同的操作,序列化并发送此对象,等等。 适用于hiddens,SELECT,TEXTAREAs ......

答案 1 :(得分:0)

可以轻松地将表单输入属性操作到您想要的任何结构。这里有两种口味

DEMO:http://jsfiddle.net/zd3Pc/

/* array of element objects */
var formMap = $.map($('form :input'), function(el, idx) {
    return {
        type: el.type,
        value: el.value,
        name: el.name
    };
});

/* object with arrays of name and value properties within type property */

var formObj = {}
$('form :input').each(function() {
    if (!formObj[this.type]) {
        formObj[this.type] = [];
    }
    formObj[this.type].push({
        name: this.name,
        value: this.value
    })
})