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

Javascript 使用jquery.each()循环创建对象键,javascript,jquery,undefined,Javascript,Jquery,Undefined,我在javascript中创建了一个名称空间来循环表单并创建一个对象。调用函数时,函数的目标是循环遍历所有特定表单类型,并构造一个对象,该对象具有一个键,该键是html输入的名称,该值是其当前值。但是,它始终返回未定义 如有任何帮助,将不胜感激: get_form_data.radio = function(container) { //will return the value var data = {}; //function data object to return c

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

您需要指定键和索引值,类似于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;
}​

您希望获得
var current_object={}.each()
调用中进行代码>声明。
.Each()
函数的每次迭代都会重新声明它,并有效地擦除它。同时也不要考虑
$.extend()

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

虽然未经测试,但可以快速浏览当前代码。

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

这是我的表单提交名称空间:

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.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;
}
以及get_form_数据命名空间:

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.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;
}

有什么优化的建议吗?

在我看来,这是可行的,尽管有点像其他评论所建议的那样迂回。我们能看到HTML吗?输入实际上有名称吗?当页面第一次加载时,它们有名称吗?您好,输入有名称,它们是用php静态构建的。我有一个包含多个表单的父div,并将每个表单作为容器发送到此命名空间函数。如果我只是提醒循环中的单个值或名称,它可以正常工作,但在循环之外不工作,我要补充的是,读取实际的DOM属性而不是属性可能会有好处,因为属性并不总是同步的。也更短:
data[this.name]=this.value@ZachShipley同意了。根本没有理由在jquery中包装这个
。但是,警告this.name或this.value会警告正确的值。这些形式之所以起作用,似乎是因为这些价值观本应如此。谢谢你的帮助