1

JQueryDialogを使用してダイアログプラグインを作成しています。以下は、渡すことができるパラメータです。これには、ユーザーが追加したいボタンのテキストと、そのボタンをクリックすると実行される関数名が含まれています。

    var settings = $.extend({
        message: 'Your action is successful',
        title: 'Message',
        showButton: true,
        buttonText: 'OK',
        onButtonClick: 'OnButtonClick',
        allowClose: true
    }, options);

ボタンのクリックイベントにその関数名を付けるという問題に直面しています。以下のようなことをしようとしていますが、エラーが発生します。

    $('#dialog-message').dialog({
        buttons: [{
            text: settings.buttonText,
            click: window[settings.onButtonClick]()

        }],
        closeOnEscape: true,
        close: function (e) {
            $(this).empty();
            $(this).dialog('destroy');
    }
    });

関数名しかないので、クリックイベントにその関数名を付けるにはどうすればよいですか。

4

1 に答える 1

0

プラグインの呼び出し元はonButtonClick、文字列ではなく、オプションのコールバックを提供する必要があります。そのようです:

function OnButtonClick(){
   //does some cool stuff
}

var settings = $.extend({
    message: 'Your action is successful',
    title: 'Message',
    showButton: true,
    buttonText: 'OK',
    onButtonClick: OnButtonClick,
    allowClose: true
}, options);

そして、次のように着信関数をバインドできます。

$('#dialog-message').dialog({
    buttons: [{
        text: settings.buttonText,
        click: settings.onButtonClick
    }],
    closeOnEscape: true,
    close: function (e) {
        $(this).empty();
        $(this).dialog('destroy');
    }
});

これが可能なのは、プラグインの初期化に使用したものonButtonClickを介して、プラグインのユーザーが(文字列ではなく)提供したコールバックへの参照を変数が保持するようになったためです。settings

お役に立てば幸いです。

于 2013-02-02T17:21:54.990 に答える