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

时间:2012-09-29 19:13:56

标签: javascript jquery

我有一个变量名称,我将其传递给插件,但该变量实际上是一个函数。 我使用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 - use variable as function name

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

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:13)

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

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

答案 1 :(得分:1)

检查Fiddle以获取工作示例。

示例只有一个链接正常工作。同样地制作其他链接。

编辑:首次评论后

<强> 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;
    });
});​

答案 2 :(得分:1)

您可以使用以下命令调用窗口/全局范围中定义的函数,例如函数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");
  }
});

<强> DEMO