2012-01-21 42 views
0

我想将所有页面输入ID和值 读入对象,并将它传递给通过它们循环并提取id和值的函数。Hot将html输入属性映射到jQuery对象?

我开始:

function send() 
{ 
var data = []; 
var inputs = $(":text"); 
for (var i = 0, l = inputs.length; i < l; i++) { 
    var input; 
    input.id = inputs[i].attr("id"); 
    input.text = inputs[i].val(); 
    data[i] = input; 
} 
receive(data); 
} 

function receive(data) 
{ 
    for (var input in data) { 
     alert(input.id); 
     alert(input.text);   
    } 
} 

为什么这不起作用?

回答

1

要将项目添加到数组中,您可能希望使用.push()而不是通过数字索引访问它。此外,jQuery提供了一个.each来遍历一个集合。

var data = []; 
$(':input:not(:button)').each(function() { 
    data.push({ 
     id: this.id, 
     text: $(this).val() 
    }); 
}); 

还有一件事。 jQuery也包括.map函数,该函数返回“映射”在一个给定的可缩短上面的代码到一个数组...

var data = $(':input:not(:button)').map(function() { 
    return { id: this.id, text: $(this).val() }; 
}); 
+0

您忘记闭架在第一个例子 – jlp

+0

@jlp确实是我做 –

3

如果你给你的input元素name属性,你可以只是做此...

var data = $(":text").serializeArray(); 

...,这导致在该数据结构(从docs截取)...

[ 
    { 
    name: "a", 
    value: "1" 
    }, 
    { 
    name: "b", 
    value: "2" 
    }, 
    { 
    name: "c", 
    value: "3" 
    }, 
    { 
    name: "d", 
    value: "4" 
    }, 
    { 
    name: "e", 
    value: "5" 
    } 
] 
+1

有一手。我以前没见过'serializeArray'。 –

0

使用jQuery的serializeArray功能

HTML:

<form id="test"> 
    <input type="hidden" name="a1" value="test" /> 
    <input type="text" name="a2" value="test2" /> 
    <input type="text" name="a3" value="test2" /> 
    <input type="text" name="a4" value="test2" /> 
</form> 

JS:

function getData(){ 
    var data = $("#test").serializeArray(); 
    for(var i in data){ 
     alert(data[i].name+":"+data[i].value); 
    } 
} 

的jsfiddle例如: http://jsfiddle.net/k2Dd4/

0

我不知道在jQuery的准确实施,但在Javascript中我会这样做

var inputs = document.getElementsByTagName("input"); 
var textelems; 

for (var i=0;i<inputs.length;i++) { 
    if (inputs[i].type == "text") { 
     tempElem = []; 
     tempElem['id'] = inputs[i].id; 
     tempElem['value'] = inputs[i].value; 
     textelems.push(tempElem); 
    } 
} 

这会给你一个二维数组(tempElems),其中每个索引都是一个带有自己的id和value索引的文本框。

0

正确的代码看起来像:

function send() 
{ 
var data = []; 
var inputs = $(":text"); 
for (var i = 0, l = inputs.length; i < l; i++) { 
    var input = {}; 
    input.id = $("#" + inputs[i].id).attr("id"); 
    input.text = $("#" + inputs[i].id).val();    
    data[i] = input; 
} 
receive(data); 
} 

function receive(data) 
{ 
    for (var i = 0, l = data.length; i < l; i++) { 
     alert(data[i].id); 
     alert(data[i].text); 
    } 
} 
相关问题