-1

特定の基準が満たされた場合にオブジェクトを配列に追加する次のループがあります。

var form = $('form[id^="product-form"]'),
    submit_button = $('#add-to-cart'),
    attr_fields = $('.additional input[type=text]'),
    attr_fields_default = {};
// Get the default values for each attribute field and place into an obj
attr_fields.each(function () {
    var field = $(this),
        field_id = field.attr('id'),
        field_val = field.val();
    attr_fields_default[field_id] = field_val;
});
var extra_attr = [];
for (var i = 0; i < attr_fields.length; i++) {
    var _field = $(attr_fields[i]);
    if (_field.val() != attr_fields_default[_field.attr('id')]) {
        var jsonStr = {
            'add': _field.attr('id'),
            'quantity': 1
        };
        extra_attr.push(jsonStr);
        console.log(jsonStr);
    } else {
        _field.attr('disabled', 'disabled').val('None');
    }
}
console.log(extra_attr);

コードは最後のループまで完全に機能しますが、console.log(jsonStr)は期待どおりに最後のオブジェクトを出力しますが、console.log(extra_attr)は出力しません。最後の項目を配列にプッシュしません。jsonStrをダミーの文字列'test'に変更しようとしても、同じ結果が得られます。

これが私のChromeデベロッパーコンソールのスクリーンショットですhttp://cl.ly/GdHw

また、元々.each()を使用してセレクターをループしようとしたところ、まったく同じ結果が得られたことにも注意してください。

         attr_fields
        .each(function(){
          if ( $(this).val() != attr_fields_default[ $(this).attr('id') ] ) {
            var jsonStr = {'add': $(this).attr('id'), 'quantity': 1};
            extra_attr.push( jsonStr );
            console.log( jsonStr );
          } else {
            $(this).attr('disabled', 'disabled').val('None');
          }
4

1 に答える 1

-1

問題は、コードの後半で.pop()を使用して最後の要素を取得する非同期呼び出しにありました。

于 2012-05-16T15:19:42.020 に答える