我已经阅读了他们建议使用的相关问题:
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');
想法?
答案 0 :(得分:3)
三件事。
ylaConfirm('message', 'title', 'Y', 'N', 'doStep1');
window[_callbackYes]();
时,尚未定义doStep1
。因此,您可以在click
函数之前定义它。解决此问题的另一种方法是将doStep1
定义为内联匿名函数,并将其直接调用为_callbackYes()
而不是window[_callbackYes]();
。因此,ylaConfirm
调用将变为这样
ylaConfirm('message', 'title', 'Y', 'N', function(){
//Include the actual definition of doStep1 here.
});
正如@VoronoiPotato在评论中所提到的,您可以直接将该函数作为第三个参数传递(您应该在doStep1
之前移动click
的定义或定义{{1}像这样doStep1
)。
var doStep1 = function() {..}
答案 1 :(得分:2)
您所描述的内容表示window[_callbackYes]
在执行ylaConfirm
期间未定义,但是由点击Yes
按钮定义。
移动doStep1
function doStep1() {
...
}
前
$(document).ready(function () {
...
}
答案 2 :(得分:1)
我会说电话
window[_callbackYes]();
完全没问题。问题是doStep1()
的范围。在匿名就绪函数内定义,它不附加到窗口对象,只能在外部函数内调用。可以在此处找到进一步的参考:Functions and Function scope
我的建议:在ready函数之外定义doStep1()
或将它附加到窗口对象,如下所示:
window.doStep1 = function() {
//do stuff
}
如果你需要为函数定义初始化页面,这可能是必要的(我认为这是不太可能的)