2

我有以下内容:

$(function () {

    $.ajaxSetup({ cache: false });
    var dialogs = {};

    var formSubmitHandler = function (e) {
        ...
    }

}

然后在另一个脚本中我尝试调用

function dialogClick(link) {

    $.get(viewUrl + parameters)
            .success(function (content) {
                if (content.match(/^[eE]rror/)) {
                    mvcOnFailure(data)
                } else {
                    $.modal({
                        title: title,
                        closeButton: true,
                        content: content,
                        width: false,
                        resizeOnLoad: true
                    }).find('form').submit(formSubmitHandler).end();
                }
            })

请注意,我已删减部分脚本以使其易于阅读。没有脚本错误仅显示以下错误:

在第二个脚本中,我收到一条错误消息,提示“SCRIPT5009:'formSubmitHandler' 在 Internet Explorer 中未定义'。

我叫错了吗?我认为该函数将是全局的,当我检查它所在的脚本时,它会附加到页面上。

4

4 回答 4

7

不,它不是全球性的;您的“formSubmitHandler”函数在您发布的第一个示例代码块的“就绪”回调中声明。因此,它是该功能的私有。

如果你真的想要一个全局函数,你可以做的是:

window['formSubmitHandler'] = formSubmitHandler;

在第一个函数中。或者,您可以将其设为 jQuery“全局”函数:

$['formSubmitHandler'] = formSubmitHandler;

在这种情况下,你会得到它作为$.formSubmitHandler.

于 2012-04-24T12:53:01.027 回答
0

尝试将您的功能移出功能块,例如

$(function () {

    $.ajaxSetup({ cache: false });
    var dialogs = {};
}

var formSubmitHandler = function (e) {
    ...
}
于 2012-04-24T12:54:43.570 回答
0

formSubmitHandler仅存在于您声明它的函数范围内,因为您使用了该var变量。

您需要:

  1. dialogClick在同一范围内声明
  2. formSubmitHandler在全局范围内声明,使用window.formSubmitHandler或简单地function formSubmitHandler(){}
于 2012-04-24T12:55:00.823 回答
0

formSubmitHandler是在函数不可见的范围内声明的dialogClick()函数

所以

  • 您要么声明formSubmitHandlerglobal
  • 或者您在函数dialogClick内部定义document.ready函数(并且formSubmitHandler因为在父范围内所以可以访问)
于 2012-04-24T12:55:42.737 回答