6

我在 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;
}​
4

3 回答 3

10

你想从电话中得到var current_object = {};声明.each()。函数的每次迭代都会.each()重新声明它,并有效地删除它。并且忘记$.extend()为好。

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

尽管通过快速浏览您当前的代码,但未经测试。

于 2012-07-26T19:59:37.413 回答
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;
}​
于 2012-07-26T19:57:49.487 回答
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;
}

关于优化这个有什么建议吗?

于 2012-07-27T04:07:49.473 回答