繁体   English   中英

jQuery从输入中获取值并创建一个数组

[英]jQuery get values from inputs and create an array

我在页面上有很多输入。 我想使用jQuery为每个输入的名称和值创建一个关联数组。 我试过了:

<input class="activeInput" type="text" name="key1" value="red">
<input class="activeInput" type="text" name="key3" value="France">

inputValues = $('.activeInput').val();

编辑 - 感谢富有洞察力的评论,似乎创建一个对象是一个更好的方法。 有关如何创建对象的任何建议吗?

您可以使用.each()迭代元素并将名称和值添加到地图(普通对象),如下所示:

var map = {};
$(".activeInput").each(function() {
    map[$(this).attr("name")] = $(this).val();
});

alert(map.key1); // "red"

看到它在行动

我知道这个问题已经有四年了,接受的答案就足够了。 不过,为了完成,我想提供一个答案,因为这个问题是Google上的第一个搜索结果。

jQuery有1.2版本的地图功能(2007年发布)。 人们可以做一些简单的事情(这不是一个跨浏览器的解决方案):

var $inputValues = $('.activeInput').map((i, el) => el.val());

虽然没有人应该在JavaScript中使用箭头功能,但IE或Safari不支持它们。 以下跨浏览器的解决方案:

var $inputValues = $('.activeInput').map(function() {
    return $(this).val();
});

请务必注意,返回值不是本机数组。 当尝试使用Array.prototype中存在的方法时,这可能会导致问题。 要将结果转换为数组,可以执行以下操作:

var inputValues = $('.activeInput').map(function() {
    return $(this).val();
}).toArray();

通过循环运行它们,您可以创建一个具有字符串可访问值的对象。 Javascript没有关联数组的概念,但是使用括号语法可以访问对象的属性,就像关联数组在PHP中工作一样。

var values = {};
$('.activeInput').each(function() {
    values[this.name] = this.value;
});

console.log(values['key1'], values['key3']);
// Note, this is the same as above.
console.log(values.key1, values.key3);

在您的控制台中,您应该看到:红色法国

这是一个JsFiddle http://jsfiddle.net/rEtVt/

这也称为用于快速查找的散列映射(概念)。

var inputValues = new Array();
$('input').each(function(){
    inputValues[$(this).attr('name')] = $(this).val();
});

当然,这是假设你想要所有输入的值。


话虽如此,我还是注意到了许多不使用和阵列的原因。

如果你需要为ajax提交序列化表单,那么你应该看看serializeserializeArray jQuery方法。 当您有许多具有相同name属性的输入时,可能会发生特殊情况,这些输入必须在服务器上生成阵列。

否则,我会在表单元素上调用jquery serializeArray并迭代其结果以将其转换为对象。

UPD:添加示例http://jsfiddle.net/zQNUW/

试试这个:

var values = new Object() // creates a new instance of an object
$('.activeInput').each(function() {
    values[$(this).attr('name')] = $(this).val()
})

要检查对象属性:

output = ""
for (property in values) {
  output += property + ': ' + values[property]+'; ';
}
alert(output)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM