繁体   English   中英

Jquery检查var是否为函数然后调用它

[英]Jquery check if var is a function and then call it

我有一个变量名称,我将其传递给插件,但该变量实际上是一个函数。 我使用jquery $ .isFunction来检查它是否是一个函数,如果是,它应该执行该函数。

但我似乎无法使它工作,我在jsfiddle中提供了一些例子: http//jsfiddle.net/tZ6U9/8/

但这是一个示例代码:

HTML

<a class="one" href="#">click</a><br />
<a class="two" href="#">click</a><br />
<a class="three" href="#">click</a><br />

JS

$(document).ready(function() {

help = function(var1) {
    alert(var1);
}

function help2(var1) {
    alert(var1);
}


$('a.one').click(function() {
    var functionName = "help";
    if ($.isFunction([functionName])) {[functionName]("hello");
    } else {
        alert("not a function");
    }

    return false;
});

$('a.two').click(function() {
    var functionName = "help";

    if ($.isFunction(functionName)) {
        functionName("hello");
    } else {
        alert("not a function");
    }
    return false;
});

$('a.three').click(function() {
    var functionName = "help2";

    if ($.isFunction(functionName)) {
        functionName("hello");
    } else {
        alert("not a function");
    }
    return false;
});

$('a.four').click(function() {
    var functionName = "help2";

    if ($.isFunction([functionName])) {[functionName]("hello");
    } else {
        alert("not a function");
    }
    return false;
});

});​

正如你所看到的,我厌倦了很多东西,但所有错误的东西可能......我从它们中激发了一些: jQuery - 使用变量作为函数名

总的来说,我传递一个与函数同名的变量,使用jquery检查它是否是一个函数,如果是,它应该执行该函数。

在此先感谢您的帮助。

如果您想通过其名称字符串调用函数,只需使用window

var functionName = "help";
if ($.isFunction(window[functionName])) {
    window[functionName]("hello");
} else {
    alert("not a function");
}

检查小提琴的工作示例。

示例只有一个链接正常工作。 使其他链接类似。

编辑:第一次评论后

HTML

<a class="one" href="#">click</a><br />

JS

var help = function(var1) {
    alert(var1);
}
$(document).ready(function() {
    $('a.one').click(function() {
        var functionName = help;
        if ($.isFunction(functionName)) {
            functionName('test');
        } else {
            alert("not a function");
        }

        return false;
    });
});​

您可以使用以下命令调用窗口/全局范围中定义的函数,例如函数help

if ($.isFunction(window[functionName])) {
  window[functionName]("hello");
}

另一方面, help2 无法通过这种方式访问​​,因为您在闭包中定义它。 可能的解决方案是在.ready()处理程序之外定义函数。 然后,您可以使用window[functionName]来调用它:

var namespace = {
  help: function (var1) {
    alert(var1);
  },

  help2: function (var1) {
    alert(var1);
  }
}

$(document).ready(function() {
  var functionName = "help";
  if ($.isFunction(namespace[functionName])) {
    namespace[functionName]("hello");
  }
});

演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM