0

AJAX を使用して内部ポップアップ ウィンドウを開く jQuery プラグインを作成しました。

ポップアップを呼び出している間、カスタム コールバックを使用して、ポップアップ ウィンドウの下部にアクション ボタンを設定できます。

ボタンを生成してコールバックを設定するコードは次のとおりです。

for(i in settings.buttons)
{
var button = settings.buttons[i];

$('<a></a>', {
    text: button.label,
    href: '#',
    click: function(e){
        e.preventDefault();
        button.callback.call();
    },
    'class': (typeof button.color == 'undefined' ? '' : button.color)
}).appendTo(popup.buttons);
}

問題は、コードが間違ったコールバックを呼び出すことです。たとえば、2 つのボタンを設定すると、そのうちの 1 つがポップアップのクローズをトリガーし、もう 1 つが入力の値をコピーすると、いずれかのボタンが 2 番目のコールバックをトリガーします。

どうすれば直せますか?

4

1 に答える 1

0

クリック機能はfor inループ終了後に実行されるため。 button.callback.call();常に最後のボタンのコールバックを呼び出します。

解決策: コンテキストを保存します。

 function keepContext(button) {
      $('<a></a>', {
        text : button.label,
        href : '#',
        click : function(e) {
            e.preventDefault();
            button.callback.call();
        },
        'class' : (typeof button.color == 'undefined' ? '' : button.color)
    }).appendTo(popup.buttons);    
}
for (i in settings.buttons) {
    keepContext(settings.buttons[i]);
}
于 2012-10-01T11:10:27.117 に答える