在foreach循环内的对象里面的jQuery对象

时间:2017-07-29 06:44:28

标签: javascript jquery

这是一个更多关于逻辑的问题,而不是技术细节。

我正在使用对象保存JavaScript创建的表单的内容,我已成功保存主表单内容,但我无法保存子表单的内容。

这是一个更好地展示问题的JSFiddle:https://jsfiddle.net/96wstepj/

1。)转到“每晚定价”> “季节性定价”并点击“添加季节性价格过滤器”,填写字段

2.)然后点击“添加价格规则”并填写字段

3。)点击“全部保存”,您将看到所有内容都以JSON格式在警报中正确显示

4.。)现在再次单击“添加季节性价格过滤器”,填写字段,然后单击“添加价格规则”并填写字段(现在您有2个季节性价格过滤器,每个都有一个定价规则)

5.单击“全部保存”,您将看到每个季节性过滤器中重复的价格规则内容(请参阅“价格”对象键)

问题:https://ibb.co/mgZHFQ

这是在对象中添加表单内容的功能:

function get_seasonal_price_rules() {

    var obj1 = {};

    var obj2 = {};

    $("#price-per-night .seasonal-filter-wrapper-outer .price-rule-wrapper-outer").each(function() {

        $(this).children('div').each(function(index2) {

            obj2[(index2 + 1)] = {

                standard_adult_weekday: $('#price-per-night input[name=standard-adult-weekday-' + (index2 + 1) + ']').val(), 
                standard_adult_weekend: $('#price-per-night input[name=standard-adult-weekend-' + (index2 + 1) + ']').val(),
                standard_child_weekday: $('#price-per-night input[name=standard-child-weekday-' + (index2 + 1) + ']').val(),
                standard_child_weekend: $('#price-per-night input[name=standard-child-weekend-' + (index2 + 1) + ']').val()

            };

        });
    })

    $(".seasonal-filter-wrapper-outer").each(function() {

        $(this).children('.seasonal-filter-wrapper-inner').each(function(index) {

            obj1[(index + 1)] = {

                seasonal_date_from: $('#price-per-night input[name=seasonal-date-from-' + (index + 1) + ']').val(), 
                seasonal_date_to: $('#price-per-night input[name=seasonal-date-to-' + (index + 1) + ']').val(), 
                seasonal_adult_weekday: $('#price-per-night input[name=seasonal-adult-weekday-' + (index + 1) + ']').val(), 
                seasonal_adult_weekend: $('#price-per-night input[name=seasonal-adult-weekend-' + (index + 1) + ']').val(),
                seasonal_child_weekday: $('#price-per-night input[name=seasonal-child-weekday-' + (index + 1) + ']').val(),
                seasonal_child_weekend: $('#price-per-night input[name=seasonal-child-weekend-' + (index + 1) + ']').val(),
                price: obj2

            };  

        });
    })

    return obj1;

}

感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

我没有太多关注,但根据输入的名称,你似乎没有跟踪"子索引"数字,以避免碰撞。你结束了这个:

  • 季节性过滤器1
    • 价格规则1
    • 价格规则2
  • 季节性过滤器2
    • 价格规则1
    • 价格规则2

您希望过滤器2的价格规则为3和4.更简单的方法是添加父级的索引号:

  • 季节性过滤器1
    • 价格规则1-1
    • 价格规则1-2
  • 季节性过滤器2
    • 价格规则2-1
    • 价格规则2-2

这将确保您拥有唯一的输入名称,以便您可以正确捕获所有数据。