使用jquery.each()循环创建对象键

我正在javascript中创建一个名称空间来循环遍历表单并创建一个对象。 调用函数的目的是遍历所有特定的表单类型,并构造一个具有键的对象,该键是html输入的名称,值是当前值。 但是,它一直返回undefined。

任何帮助将不胜感激:

get_form_data.radio = function(container) { //will return the value var data = {}; //function data object to return container.find('input[type="radio"]:checked').each(function() { var current_object = {}; //loop temporary object var current = $(this); //current element var current_key = current.attr('name'); //property category var current_value = current.attr('value'); //value to update the database with current_object[current_key] = current_value; //temporary object console.log(current_object.length); //RETURNS UNDEFINED $.extend(data, current_object); }); console.log(data.length); //returns undefined return data; }​ 

你想得到var current_object = {}; 声明离开.each()调用。 .each()函数的每次迭代.each()重新声明它,并有效地删除它。 并忘记$.extend()

 var data = {}; container.find('input[type="radio"]:checked').each(function() { data[this.name] = this.value; }); return data; 

通过快速浏览当前代码未经测试。

您需要指定键值和索引值,如thtat:

 array.each(function(index, value) { alert(index + ': ' + value); }); 

在你的情况下:

 get_form_data.radio = function(container) { //will return the value var data = {}; //function data object to return container.find('input[type="radio"]:checked').each(function(index,value) { var current_object = {}; //loop temporary object var current = value; //current element var current_key = current.attr('name'); //property category var current_value = current.attr('value'); //value to update the database with current_object[current_key] = current_value; //temporary object console.log(current_object.length); //RETURNS UNDEFINED $.extend(data, current_object); }); console.log(data.length); //returns undefined return data; }​ 

通过查看全局范围解决了问题。 似乎上面的代码工作但我的全局命名空间在每个循环中混淆current = $(this)和this.data,它是表单数据的全局对象。

inheritance我的form_submit命名空间:

 this.data = {}; this.property_status = function() { var property_status = {}; this.container.children('form').each(function() { var current = $(this); property_status[current.attr('data-property_id')] = get_form_data.radio(current); }); $.extend(this.data, property_status); }; 

和get_form_data命名空间:

  get_form_data.radio = function(container) {//will return the value var form_data = {};//function data object to return container.find('input[type="radio"]:checked').each(function() { form_data[this.name] = this.value; }); return form_data; } 

有关优化的建议吗?