1

「contact1_title」、「contact2_title」、「contact3_title」などのIDを持つフォームに入力領域のリストがあります...。

また、このフォームには、「contact1_name」、「contact2_name」、「contact2_name」などのIDを持つ選択リストがあります。

選択範囲のonchange関数を動的にバインドするループを作成したいと思います。

これが私のコードです:

for(var j=1;j<6;j++){                        
                    $('#contact'+j+'_name').change(function() {
                        alert(j);
                        //json.engineer is a json object
                        $('#contact'+j+'_title').val( json.engineer[this.selectedIndex-1].title );
                    });
}

選択を変更すると、常に6にアラートが表示されます。

タイトル入力エリアは選択で変更できません。

javascriptの変数が常に変化するという意味ですか?

アクションを動的にバインドするにはどうすればよいですか?

"this.name.split(" _ ")[0]"を使用してハッキングできますが、コードが見苦しいようです。

よろしくお願いします。

4

3 に答える 3

2

change機能を閉じてラップします。

for(var j=1;j<6;j++){     
    (function(j){                   
         $('#contact'+j+'_name').change(function() {
             alert(j);
             //json.engineer is a json object
             $('#contact'+j+'_title').val( json.engineer[this.selectedIndex-1].title );
         });
     })(j);
}

問題は、クリックするとループがすでに終了しているため、jに等しいということでした6

于 2012-06-20T18:47:14.667 に答える
1

別の解決策は、カウンターをイベントデータとして渡すことです。

for(var j=1;j<6;j++){                        
    $('#contact'+j+'_name').change({index: j}, function(event) {
        $('#contact' + event.data.index + '_title')
           .val(json.engineer[this.selectedIndex-1].title );
    });
}

ループの使用を避けることができればさらに良いでしょうが、forそれはマークアップと、作成された要素を制御できるかどうかによって異なります。おそらくそうするためにそれらを調整する必要があるからです。

于 2012-06-20T18:57:07.917 に答える
0

すでに閉鎖がありますので、効率よくご利用ください。

for(var j=1;j<6;j++){                        
     $('#contact'+j+'_name').change(function() {
     var k=j;
     alert(k);
     //json.engineer is a json object
     $('#contact'+k+'_title').val( json.engineer[this.selectedIndex-1].title );
     });
}
于 2012-06-20T18:52:17.230 に答える