簡體   English   中英

使用jquery.each()循環創建對象鍵

[英]Creating Object Key with jquery.each() loop

我正在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,它是表單數據的全局對象。

繼承我的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;
}

關於優化這個的任何建議?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM