我已经在其他StackOverFlow问题上研究了这个问题,我似乎找不到答案。
我有一个表格。
<input name="item[1]" class="item" value="1">
<input name="item[2]" class="item" value="50">
<input name="item[3]" class="item" value="12">
我试图得到每个项目输入的结果,并通过Ajax发送到我的控制器,这是很好的,当使用表单action="方法,但通过Ajax我似乎不能格式化数组格式的数据。
谁能告诉我我做错了什么?$('button#despatchOrder').on('click', function() {
var values = $("input.items");
var myArray = $.map(values, function(value, index) {
return [value];
});
console.log(myArray);
});
不幸的是,Jquery不是我最擅长的语言,但我正在学习。我原以为输出会是这样的。
items = [
1 => 1,
2 => 50,
3 => 12
]
但是我有所有与输入相关的东西,比如
Input 1 = [
accept
accessKey
alt
etc
etc
]
谁能告诉我我做错了什么?
很少!: -)
- 在你的
$.map
回调中,第一个参数将是元素,而不是它的值,所以你只使用它的value
属性。 - 你也包装它在一个数组(
return [value]
),你不想这样做;$.map
将根据您从每次回调调用返回的值构建一个数组。 - 还有,你想用
input.item
的地方用了input.items
。 -
如果你不使用
index
参数,你不需要声明它。$('按钮# despatchOrder ')。On ('click', function() {
var values = $("input.item"); // *** var myArray = $.map(values, function(element) { // *** return element.value; // *** }); console.log(myArray);
});
的例子:
$('button#despatchOrder').on('click', function() {
var values = $("input.item");
var myArray = $.map(values, function(element) {
return element.value;
});
console.log(myArray);
});
<input name="item[1]" class="item" value="1">
<input name="item[2]" class="item" value="50">
<input name="item[3]" class="item" value="12">
<button id="despatchOrder">Despatch</button><script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
这给了你数组中的项目,没有使用item[1]
和这样的名称。你想要的
items = [
1 => 1,
2 => 50,
3 => 12
]
不是有效的JavaScript。以上给出:
myArray = ["1", "50", "12"];
但是如果你想要名称/值对,可能一个对象数组是最好的:
myArray = [
{name: "1", value: "1"},
{name: "2", value: "50"},
{name: "3", value: "12"}
]
设置:
var myArray = $.map(values, function(element) {
return {name: element.name.substring(5, 6), value: element.value};
});
当然,如果你想要完整的item[1]
名称,只需删除substring
部分。
的例子:
$('button#despatchOrder').on('click', function() {
var values = $("input.item");
var myArray = $.map(values, function(element) {
return {name: element.name.substring(5, 6), value: element.value};
});
console.log(myArray);
});
<input name="item[1]" class="item" value="1">
<input name="item[2]" class="item" value="50">
<input name="item[3]" class="item" value="12">
<button id="despatchOrder">Despatch</button><script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
为了完整起见,您还可以使用其他
map
函数(jQuery有两个),但它在这里没有任何真正的好处:
var myArray = values.map(function() {
return this.value;
}).get();
注意结尾的.get()
javascript没有关联数组,但是你仍然可以通过数字键访问元素
$('button#despatchOrder').on('click', function() {
var values = $("input.items");
var myArray = $.map(values, function(value, index) {
return $(value).val();
});
console.log(myArray);
console.log(myArray[0]);
});
如果你想要类似于关联数组的东西,你应该使用js对象
{key:"value"}