Javascript jQuery变量范围在每个
我试图构建一个数组,其中包含每个表单元素的所有值。警报只在查找时起作用,但在console.log数据为空时,我是否无法理解javascript中的作用域是如何工作的Javascript jQuery变量范围在每个,javascript,jquery,foreach,scope,each,Javascript,Jquery,Foreach,Scope,Each,我试图构建一个数组,其中包含每个表单元素的所有值。警报只在查找时起作用,但在console.log数据为空时,我是否无法理解javascript中的作用域是如何工作的 var data = new Array(); $("#page2 input").each(function(index) { alert($(this).attr('id')); data[$(this).attr('id')] = $(this).val(); }); 非常感谢您的时间,
var data = new Array();
$("#page2 input").each(function(index) {
alert($(this).attr('id'));
data[$(this).attr('id')] = $(this).val();
});
非常感谢您的时间,您试图创建一个对象(
newobject()
或{}
),而不是一个数组。需要知道的一点是,JavaScript中的数组
只能具有正整数索引(实际上被视为字符串)
将字符串指定给键时,就是将属性指定给对象
你可能想要这样的东西
var data = {};
$("#page2 input").each(function() {
data[this.id] = this.value;
});
如果只需要id
属性
var data = $("#page2 input").map(function() {
return this.id;
}).get();
.如果将输入id用作键,则创建的是对象,而不是数组
var data = new Object();
范围是正确的。如果控制台没有在数组中显示entires,那么我猜您的ID属性不是数字 这并不意味着数据不存在。这仅仅意味着控制台选择只显示数字索引 考虑Chrome控制台的以下输入:
var arr = new Array();
arr['test'] = 'test';
arr; // []
arr.test; // 'test'
虽然将非数值属性赋予数组是有效的JavaScript,但在大多数情况下,这是错误的方法。您的问题是:
…每个表单元素的所有值
但选择器仅用于一种特定形式的输入元素。假设您确实需要表单中所有控件的值,那么以下POJ可能适合:
function getFormValues(formId) {
var data = {};
var form = document.getElementById(formId);
if (form) {
var control, controls = form.elements;
if (controls) {
var i = controls.length;
while (i--) {
control = controls[i];
data[control.id] = control.value;
}
}
}
return data;
}
假设每个控件都有一个ID,这不是必需的。如果某些控件没有id,您可能希望改用name属性,因此:
data[control.id || control.name] = control.value;
在某些情况下,您的控件可能没有id或名称(例如表单需要但不提交其值的控件,如提交和重置按钮),因此:
您可能还需要处理具有相同名称的控件,因为最后访问的控件的值将替换以前同名控件的值。编写效率更高:
this.id
和this.value
。感谢,特别是第二部分,看起来很有趣!我必须立即停止编程两种语言(PHP/Javascript),这会导致混乱!
var idOrName = control.id || control.name;
if (idOrName) {
data[idOrName] = control.value;
}