0

++++++++++更新++++++++++++++++

さらにテストしたところ、 attr メソッドが属性を設定できないことが数回ありました。簡単にするために、次のコード行を変更します。

$(this).attr('name', 'yahoo');

afterRemoveCurrentイベントがトリガーされた後、上記のコード行が実行されるはずでしたが、驚いたことにconsole.log$(this)属性はに変更されませんでしたyahoo。これを数回繰り返したところ、属性が変更された回数と変更されていない回数があることがわかりました。setTimeout内部の関数全体の実行をafterRemoveCurrent500ミリ秒遅らせていましたが、結果は同じでした。これは役に立ちますか?

++++++++++更新内容は以上で終了++++++++++++++++++++++++

期待どおりに動作しないこの小さなコードがあります。sheetit http://www.mdelrosso.com/sheepit/index.php?lng=en_GBというプラグインを使用しています(複数のフォーム フィールドを追加できます):

ページのライブ バージョンは次の場所で見ることができます。

このiステートメントの$(this).attr('name', 'rooms[' + i + ']' + '.' + arr[1] + '.' + arr[2]);は、正しく評価されないことがあります。もう少し詳しく言うと:

変数iは、次の 2 つのステートメント (各ループ) で同じである必要があります。

$(this).attr('data-index', i);
$(this).attr('name', 'rooms[' + i + ']' + '.' + arr[1] + '.' + arr[2]);

しかし、どういうわけか、値がi最初0のステートメントにある場合、それは1または2番目のステートメントにある他の数値です。

var sheepItForm = $('#sheepItForm').sheepIt({
    separator: '',
    allowRemoveLast: false,
    allowRemoveCurrent: true,
    allowAdd: true,
    maxFormsCount: 8,
    minFormsCount: 1,
    iniFormsCount: 0,
    pregeneratedForms: ['pregenerated_form_1'],
    afterRemoveCurrent: function(source) {
        var i = 0;
        $('select.children').each(function() {
            $(this).attr('data-index', i);
            $(this).parent().find('select.child-age-option').each(function() {
                var arr = $(this).attr('name').split('.');
                $(this).attr('name', 'rooms[' + i + ']' + '.' + arr[1] + '.' + arr[2]);
            });
            i++;
        });
    }
});
4

2 に答える 2

1

クロージャーを使用します。

afterRemoveCurrent: function(source) {
    (function(i) {
        $('select.children').each(function() {
            $(this).attr('data-index', i);
            $(this).parent().find('select.child-age-option').each(function() {
                var arr = $(this).attr('name').split('.');
                $(this).attr('name', 'rooms[' + i + ']' + '.' + arr[1] + '.' + arr[2]);
            });
            i++;
        });
    })(0);
}
于 2013-10-31T12:03:03.940 に答える
0

これを試して

var sheepItForm = $('#sheepItForm').sheepIt({
    separator: '',
    allowRemoveLast: false,
    allowRemoveCurrent: true,
    allowAdd: true,
    maxFormsCount: 8,
    minFormsCount: 1,
    iniFormsCount: 0,
    pregeneratedForms: ['pregenerated_form_1'],
    afterRemoveCurrent: function(source) {
        $('select.children').each(function(i) {
            $(this).attr('data-index', i);
            $(this).parent().find('select.child-age-option').each(function() {
                var arr = $(this).attr('name').split('.');
                $(this).attr('name', 'rooms[' + i + ']' + '.' + arr[1] + '.' + arr[2]);
            });
        });
    }
});
于 2013-10-31T12:02:55.247 に答える