1

以下のコードは奇妙なことをします。ダイアログのボタンをクリックすると、各ボタンの「test0」、「test2」、...「test4」ではなく、警告テキストとして「test5」が表示されます。ループ内での関数の割り当てに関する何かが機能していません。

var arrbuttons = [];

for (var i=0; i<5; i++) {
    arrbuttons.push({click: function() { alert('test'+i);}, text:'test'+i});
}

jQuery("#requestdialog").dialog(
    {
        title: "test",
        height: 250,
        width: 500,
        modal: true,
        buttons: arrbuttons
    }
4

1 に答える 1

2

スコープとクロージャーがすべてです:

var arrbuttons = [];

for (var j=0; j<5; j++) {
    (function(i) {
        arrbuttons.push({click: function() { alert('test'+i);}, text:'test'+i});
    })(j);
}

jQuery("#requestdialog").dialog(
    {
        title: "test",
        height: 250,
        width: 500,
        modal: true,
        buttons: arrbuttons
    }
于 2013-09-15T17:49:10.373 に答える