调用变量jQuery函数

时间:2013-09-18 17:57:47

标签: javascript jquery dynamic-function

I've been shown如何使用function调用变量javascript window[]()

是否可以调用变量jQuery function?如果是这样,怎么样?

通常,我只需要三元素来翻转可见开关,将许多代码行刷成1会非常方便。例如,在$.aja() success内部:

if(msg.length > 0){
    $("#gridViewContainer").slideDown()
}
else{
    $("#gridViewContainer").slideUp()
}

这可能是一个不好的例子,因为boolean可能会传递给slide()或其他什么,但我想在上面的链接问题中使用这个概念。

这对我不起作用:

$("#gridViewContainer")[((msg.length > 0)?'slideDown':'slideUp')]()

1 个答案:

答案 0 :(得分:6)

jQuery函数仍然只是JavaScript函数,因此相同的规则适用于任何其他JS函数。

您可以按如下方式调用对象objectVar的方法:

objVar.method();
objVar["method"]();
var methodName = "method";
objVar[methodName]();

使用window[]()提到的问题 - 适用于全局函数,因为它们本质上是window的属性(当然,如果在浏览器中运行JS)。

对于jQuery,您可以这样做:

var methodName = "hide";
$(someSelector)[methodName]();
$(someSelector)[anyJSExpressionThatReturnsAStringThatIsAjQueryMethod]();
编辑:我刚看到问题的新版本。使用?:运算符选择方法名称显示的代码行应该与if/else具有相同的效果。我自己使用过类似的代码没有任何问题,它在the fiddle that Jason P provided中运行良好。请注意,由于您的动机似乎是关于缩短代码,您可以省略[]中表达式中的所有括号,并执行此操作:

$("#gridViewContainer")[msg.length > 0?'slideDown':'slideUp']();

...或者甚至省略> 0部分,因为msg.length非零时将是真实的:

$("#gridViewContainer")[msg.length ?'slideDown':'slideUp']();