2015-01-20 53 views
0

我在HTML阅读HTML阵列使用JavaScript或jQuery的

<input type="checkbox" value="Value1" name="model[settings][]"> 
<input type="checkbox" value="Value2" name="model[settings][]"> 
<input type="checkbox" value="Value3" name="model[settings][]"> 

我读所有的HTML的输入,其迭代和构建在JavaScript中的散列数组元素。但是这将读取数组元素,并只选择最后一个模型[settings] []元素。

var inputs = jQuery(" :input", "#elementID"); 

是否有jQuery中或JavaScript的方式读取和在JavaScript然后可以被传递到控制器建立一个数组变量?

谢谢

+0

为什么您使用相同的数组名复选框?对于收音机这是可以理解的,但不是复选框 – charlietfl 2015-01-20 22:55:39

回答

2

如果我理解正确的话,你想通过你的所有input元素迭代得到他们的价值和存储作为一个JS对象,正确吗? 如果是这样的话,我会一个唯一的ID添加到我的所有的输入,然后创建一个具有结构{ id : value }对象:

function getInputObject(sel) { 
 
    sel = $(sel); 
 
    var out = {}; 
 
    sel.each(function() { 
 
    out[$(this).attr("id")] = $(this).val(); 
 
    }); 
 
    return out; 
 
} 
 
$(document).ready(function() { 
 
    console.log(getInputObject("input")); 
 
});
input { 
 
    display: block; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<input id="input1" value="value input 1" type="text" /> 
 
<input id="input2" value="value input 2" type="text" /> 
 
<input id="input3" value="value input 3" type="text" />

+0

所以我想要使用HTML元素的名称, 即name =“model [something]”,name =“model [settings] []” 这将构建一个迭代它时使用它的名字散列, 即data [inputs [i] .name] = inputs [i] .value; 但数组名称具有相同的名称并覆盖现有值。因此data [model [settings]]在构建数据时应该是数组类型,而不是分配数据[model [settings] []]。 – ConfusedUser 2015-01-20 22:15:46

+0

在你的例子中,你的所有名字都是相同的,所以你的对象将只包含一个带有最后一个输入值的键。但是如果你的名字是这样的:'model [settings] [smth]'和'model [settings] [smth-else]',你需要改变这一行:'out [$(this).attr(“ ()); $(this).val();'这个:out [$(this).attr(“name”)] = $(this).val();'更新我的答案以反映这个。 – Marventus 2015-01-20 22:19:14

+0

在你最后评论编辑之后,我并没有真正遵循你想要完成的事情。我很抱歉,但你能详细说明一下吗? – Marventus 2015-01-20 22:26:05