1

ボタンでモーダルを作成するために使用される次のスクリプトがあります。以下の最初の行があります。

$.modal = function(options)
    {
        var settings = $.extend({}, $.modal.defaults, options),
            root = getModalDiv(),

            // Vars for resizeFunc and moveFunc
            winX = 0,
            winY = 0,
            contentWidth = 0,
            contentHeight = 0,
            mouseX = 0,
            mouseY = 0,
            resized, content = '', contentObj;

そして後で:

    var buttonsFooter = false;
    $.each(settings.buttons, function(key, value)
    {
        // Button zone
        if (!buttonsFooter)
        {
            buttonsFooter = $('<div class="block-footer align-'+settings.buttonsAlign+'"></div>').insertAfter(contentBlockWrapper);
        }
        else
        {
            // Spacing
            buttonsFooter.append('&nbsp;');
        }

モーダルを作成する方法は次のとおりです。

$.modal({
                    title: title,
                    closeButton: true,
                    content: content,
                    complete: function () {
                        applyTemplateSetup();
                        $($('#main-form')).updateTabs();
                    },
                    width: 900,
                    resizeOnLoad: true,
                    buttons: {
                        'Submit' : function () {
                            formSubmitHandler($('#main-form'));
                        }
                    }
                });

私がやりたいことは、このスクリプトを使用してボタン付きのモーダルを作成し、ボタン名を動的に割り当てることです。しかし、'Submit' を JavaScript 変数の名前に置き換えようとすると、うまくいきませんでした。どうすれば私が必要なことをすることができるか誰かが知っていますか?

4

2 に答える 2

1

変数名での置換'Submit'が機能しない理由は、その方法でオブジェクトを定義するときに引用符が必要ないためです (名前に特殊文字が含まれていない限り)。var obj = { 'Submit': function() { } }とまったく同じですvar obj = { Submit: function() { } }

に渡すオブジェクトで、このような引用符を既に省略していることに気付くでしょう$.modal()

しかし、あなたが書くことができない間

var myVariable = 'abc';
var obj = { myVariable: 3 };

...そして存在することを期待obj.abcする(obj.myVariable存在する)、あなた書くことができます

var myVariable = 'abc';
var obj[myVariable]  = 3;

...そして存在しますobj.abc

したがって、次の方法で問題を解決できます。

var buttons = { };

buttons[variableName] = function () {
   formSubmitHandler($('#main-form'));
};

$.modal({
   ...
   buttons: buttons
});
于 2012-04-26T12:08:48.560 に答える
0

編集: David Hedlundは私を打ち負かして回答し、コードの変更が少し少ない同様の回答を提供しました。彼は、オプション変数全体ではなく、ボタン オプションのみを分割することを提案しています。編集を終了

まず、オプションを変数に分割します。

var modalOpts = {
    title: title,
    closeButton: true,
    content: content,
    complete: function () {
        applyTemplateSetup();
        $($('#main-form')).updateTabs();
    },
    width: 900,
    resizeOnLoad: true,
    buttons: {
        'Submit' : function () {
            formSubmitHandler($('#main-form'));
        }
    }
};

$.modal(modalOpts);

次に、問題のボタンをオプションから切り離し、角括弧表記を使用してプロパティにアクセスして書き込みます。

var dynamicButtonName = 'Submit'; //Or whatever

var modalOpts = {
    title: title,
    closeButton: true,
    content: content,
    complete: function () {
        applyTemplateSetup();
        $($('#main-form')).updateTabs();
    },
    width: 900,
    resizeOnLoad: true,
    buttons: {}
};

modalOpts.buttons[dynamicButtonName] = function () {
    formSubmitHandler($('#main-form'));
};

$.modal(modalOpts);
于 2012-04-26T12:10:46.513 に答える