1

我在这里阅读了他们建议使用的相关问题:

var functionName="myFunctionName";
window[functionName]();

好吧,我在这里,但它不起作用:

具有回调字符串变量的自定义模态框函数:

<script>
        $(document).ready(function () {
            //
            // Events
            //
            $('#btnStep1').click(function () {
                ylaConfirm('message', 'title', 'Y', 'N', 'doStep1');
            });
            //
            //
            // Functions
            //
            function doStep1() {
                ...
                ...
                });
            }
            function ylaConfirm(_msg, _title, _btnYes, _btnNo, _callbackYes) {
                bootbox.dialog({
                    message: _msg,
                    title: _title,
                    buttons: {
                        success: {
                            label: _btnYes,
                            className: "btn-success",
                            callback: function () {
                                window[_callbackYes]();
                            }
                        },
                        main: {
                            label: _btnNo,
                            className: "btn-primary"
                        }
                    }
                });
            }
        });
        //


    </script>

Firebug 报告:未定义...

调用代码:

ylaConfirm('message', 'title', 'Y', 'N', 'doStep1');

想法?

4

3 回答 3

3

三件事。

ylaConfirm('message', 'title', 'Y', 'N', 'doStep1');
  1. window[_callbackYes]();执行时,doStep1尚未定义。所以你可以在click函数之前定义它。
  2. 解决此问题的另一种方法是定义doStep1为内联匿名函数并直接调用它_callbackYes()而不是window[_callbackYes]();. 所以,ylaConfirmcall会变成这样

    ylaConfirm('message', 'title', 'Y', 'N', function(){
        //Include the actual definition of doStep1 here.
    });
    
  3. 正如@VoronoiPotato 在评论中提到的那样,您可以直接将函数作为第三个参数传递(您应该移动doStep1之前的定义clickdoStep1像这样定义var doStep1 = function() {..})。

    ylaConfirm('message', 'title', 'Y', 'N', doStep1);
    ...
    ...
    _callbackYes(); // Instead of window[_callbackYes]();
    
于 2013-10-09T14:03:28.707 回答
2

您所描述的表明window[_callbackYes]不是在执行期间定义的ylaConfirm,而是在Yes单击按钮时定义的。

移动定义doStep1

function doStep1() {
  ...
}

$(document).ready(function () {
  ...
}
于 2013-10-09T13:53:18.523 回答
1

我会说电话

window[_callbackYes]();

完全没问题。问题是范围doStep1()。在匿名就绪函数内部定义,它不附加到窗口对象,只能在外部函数内部调用。进一步的参考可以在这里找到:函数和函数范围

我的建议:要么doStep1()在 ready 函数之外定义,要么将其附加到 window 对象,如下所示:

window.doStep1 = function() {
//do stuff
}

如果您需要为函数定义初始化页面(我认为这极不可能),这可能是必要的

于 2013-10-09T14:17:05.720 回答