javascript - 如何执行作为参数传递的 JQuery 匿名函数?

标签 javascript jquery anonymous-function

下面的代码有问题。我在网站上进行了搜索,找到了接近但没有雪茄。

我希望当单击附加到 .callapp 的项目时执行以下操作:

  1. $jQuery.使用从 getURL(xapp) 收到的 url 加载内容部分
  2. 无论状态是什么,都执行“requesthandler”
  3. 如果请求成功,让“requesthandler”使用onSuccess并执行它

我不确定如何执行传递给“requesthandler”的匿名函数。我需要这个匿名函数来使用我传入的参数执行“loadURL”函数,这将引发与本文无关的另一串事件。

谢谢!

var url = "";
var tab = "";
var app = "base";
var out = "";
$(document).ready(function() {
    $(".callapp").click(function(e) {
        e.preventDefault();
        $('#wxreturn').html("<div id='xtools'></div><div id='xerror'></div><div id='xdapps'></div>");
        hideContent(1, 1);
        $('#xdapps').load( getURL("base"), function(resp, stat, xhr) {
            requesthandler(iStat, iXHR, 0, 0, 0, 0, function() {
                loadURL("tools", "xtools", 1, 1, 1, 1);
            });
        });
        return 0;
    });
});
// piece together a url
function getURL(xapp) {
    // url to return
    var url = null;
    // global tab must not be empty
    if (tab.length) {
        // check if app is defined
        if (!xapp.length) {
            // app is either the global or base
            xapp = app | "base";
        } else {
            // set the global
            if (!(xapp == "tools") && !(xapp == "options")) app = xapp;
        }
        // set the url to return
        url = "/" + tab.toLowerCase() + "/" + xapp.toLowerCase() + "?_=" + Math.random();
    } else {
        // undefined functionality error
        alert("Invalid getURL...Tab Missing");
    }
    // return the url
    return url;
}
// load a url
function loadURL(xapp, target, showApp, showOpt, showTools, clearTools) {
    // defaults
    showApp = showApp | 0;
    showOpt = showOpt | 0;
    showTools = showTools | 0;
    clearTools = clearTools | 0;
    // do only if app and target are defined
    if (!(xapp == undefined) && !(target == undefined)) {
        // set target
        if (!(target.contains("#"))) target = "#" + target;
        // get url string
        var url = getURL(xapp);
        // check if null
        if (!(url == null)) {
            // commence with load   
            $(target).load(url, function(resp, stat, xhr) {
                // call back with the request handler
                requesthandler(stat, xhr, showApp, showOpt, showTools, clearTools);
            });
        }
    } else {
        // undefined functionality error
        alert("Invalid LoadURL...Missing App...Target");
    }
}
// request handler
function requesthandler(stat, xhr, showApp, showOpt, showTools, clearTools, onSuccess) {
    // defaults
    showApp = showApp | 0;
    showOpt = showOpt | 0;
    showTools = showTools | 0;
    clearTools = clearTools | 0;
    onSuccess = onSuccess | null;
    // check for status
    if (stat == "success") {
        // execute
        if (!(onSuccess == null)) {
            // perform function
            (onSuccess());
        }
    } else {
        if (xhr.status == 401) {
            // throw session expired
            sessionTimeOut();
        } else if (xhr.status == 403) {
            // throw authorization failure
            failedAuthorize();
        } else {
            // throw application request failure
            failedAPPRequest(clearTools);
        }
    }
}

最佳答案

onSuccess = onSuccess | null;

此处需要使用两个 |,而不是一个。

showApp = showApp || 0;
showOpt = showOpt || 0;
showTools = showTools || 0;
clearTools = clearTools || 0;
onSuccess = onSuccess || null;

为了安全起见,我会在运行之前检查 onSuccess 是否是一个函数(不仅仅是它不为空):

if (typeof onSuccess === 'function') {
    // perform function
    onSuccess();  // the extra "()" aren't needed here
}

如果您这样做,onSuccess ||不需要 null

关于javascript - 如何执行作为参数传递的 JQuery 匿名函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11634146/

相关文章:

javascript - 有没有更有效的方式来显示 DOM 元素

javascript - 使菜单在点击任意屏幕时消失

javascript - 如何将匿名函数转换为普通函数?

javascript - 将匿名函数更改为命名函数时如何添加额外参数

c# - 将 C# 变量传递给 JS 的最佳方式

javascript - 为什么在 Typescript 中导入文件时需要添加 .js 扩展名,而在 Angular 导入中则不需要?

javascript - 当没有明确的分隔符时,在 JavaScript 中分割字符串

javascript - 动画模式无法正常工作

javascript - 按下回车键时表单未提交

javascript - 无法将父函数参数传递给子匿名函数