javascript - 用命名函数替换匿名函数(在 jQuery 中)

标签 javascript jquery parameters anonymous-function

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

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”未定义。但是没有参数的函数似乎工作正常。

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

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

最佳答案

您错误地将函数分配给处理程序,试试这个:

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

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

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

关于javascript - 用命名函数替换匿名函数(在 jQuery 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18760908/

相关文章:

jquery - 如何从 jQuery $.ajax 调用 servlet 而不会出现 HTTP 404 错误

Jquery 每个 <li> 应用鼠标悬停背景

java - 如何为通过 "gradle run"启动的 Java 应用程序设置最大堆大小 (-Xmx)?

java - 在 Java 中反射(reflect)调用者中变量的更改

javascript - Strapi 项目显示 URL 未定义

javascript - 将 Google Recaptcha 与 ajax 结合使用 - 不再加载

javascript - 如何避免 React 组件自动绑定(bind) 'this' ?

javascript - 将PHP数据拉入JS以动态改变屏幕宽度的BG图像

sql-server - 将 where 子句中的常量移至变量会显着改变执行计划吗?

javascript - React(Meteor)中的子组件不触发事件