1

我正在使用 JQuery Dialog 创建一个对话框插件。以下是可以传递的参数。它包括用户想要添加的按钮文本和回调函数名称,该名称将在单击该按钮时执行。

    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 回答