Javascript / JQueryを使用して、いくつかのHTMLボタンを動的に作成しようとしています。各ボタンをクリックすると、それぞれが異なる動作をします。
私の最初の試みは次のようになりました:
function myFunc( target_div, num_buttons ) {
var buttons="";
for ( var i=0; i<num_buttons; i++ ) {
buttons += '<input type="button" id="button_'+i+'" value="button_'+i+'"></input>';
}
target_div.html( buttons );
var doButtonPress = function( i ) {
alert( i ); // I actually do something more complicated here, but it's not important now
}
for ( var i=0; i<num_buttons; i++ ) {
$('#button_'+i).click( function() { doButtonPress(i); } );
}
}
残念ながら、これは機能しません。クリックイベントが発生すると、doButtonPressには、クリックイベントが定義されたときの値ではなく、myFuncのスコープ内のiの現在の値が常に渡されるためです。したがって、doButtonPressに渡される値は、どのボタンが押されたかに関係なく、常にnum_buttonsと等しくなります。だから私は代わりにこれを試しました:
$('#button_'+i).click( new Function( "doButtonPress("+i+");" ) );
残念ながら、これも機能しません。「ReferenceError:Ca n't find variable:returnResult」というメッセージが表示されます。これは、クリックイベントが発生するまで関数コンストラクターのarg値が解析されないためだと思います。その時点で、私はすでにmyFuncのスコープ外にいるため、doButtonPressは未定義ですか?私はこれまでのところこれを正しく理解していますか?
だから...私は何をしますか?:-)