我正在javascript中创建一个名称空间来遍历表单并创建一个对象。调用函数的目的是遍历所有特定的表单类型,并构造一个具有键的对象,该键是html输入的名称,值是其当前值。但是,它一直未定义返回。
非常感谢任何帮助:
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;
}
答案 0 :(得分:8)
您希望从var current_object = {};
电话中获取.each()
声明。 .each()
函数的每次迭代都重新声明它,并有效地删除它。并忘记$.extend()
。
var data = {};
container.find('input[type="radio"]:checked').each(function() {
data[this.name] = this.value;
});
return data;
通过快速浏览当前代码未经测试。
答案 1 :(得分:1)
您需要指定键值和索引值,如下所示:
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;
}
答案 2 :(得分:0)
通过查看全局范围解决了问题。看起来上面的代码工作但是我的全局命名空间在每个循环中混淆current = $(this)
和this.data,它是表单数据的全局对象。
继承我的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;
}
有关优化此事的任何建议吗?