3

我有一个传递给插件的变量名,但该变量实际上是一个函数。我使用 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检查它是否是一个函数,如果是,它应该执行该函数。

在此先感谢您的帮助。

4

3 回答 3

15

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

var functionName = "help";
if ($.isFunction(window[functionName])) {
    window[functionName]("hello");
} else {
    alert("not a function");
}
于 2012-09-29T19:26:16.347 回答
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;
    });
});​
于 2012-09-29T19:27:29.983 回答
1

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

演示

于 2012-09-29T19:28:52.210 回答