3

我的原始(工作)代码如下所示:

jQuery().ready(function ($) {
    $('[id="errorMessages"]').ajaxStart(function () {
        $(this).html("");
    });
    $('[id="errorMessages"]').ajaxError(function (e, jqxhr, settings, exception) {
        //...
    });
});

当我试图将匿名函数替换为命名函数调用时,例如:(我正在为某些要求做 POC,它期望这样的实现。)

function fs() {
        $(this).html("");
}
function fe(e, jqxhr, settings, exception) {
        //...
}
jQuery().ready(function ($) {
    $('[id="errorMessages"]').ajaxStart(fs());
    $('[id="errorMessages"]').ajaxError(fe(e, jqxhr, settings, exception));
});

我收到一条错误消息,指出参数“e”未定义。但是没有参数的函数似乎工作正常。

我想知道匿名函数如何接收参数,而在调用外部函数时同样不可用。

有没有办法将这些参数化匿名函数转换为常规函数调用。

4

1 回答 1

6

您错误地将函数分配给处理程序,请尝试以下操作:

jQuery().ready(function ($) {
    $('[id="errorMessages"]').ajaxStart(fs);
    $('[id="errorMessages"]').ajaxError(fe);
});

请注意,传递不带括号的函数名称意味着您提供了该函数的引用,该引用应在事件发生时使用。

您当前的代码将在附加事件时调用该函数(因此您得到'e' is undefined)并将函数的结果分配给事件处理程序。

于 2013-09-12T09:51:27.777 回答