【问题标题】:call variable jQuery function调用变量jQuery函数
【发布时间】:2013-09-18 17:57:47
【问题描述】:

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

是否可以调用变量jQueryfunctions?如果有,怎么做?

通常情况下,我只需要一个三元来翻转一个可见的开关,将很多行代码压缩成1会非常方便。例如,在$.aja()success内部:

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

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

这对我不起作用:

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

【问题讨论】:

  • “调用变量 jQuery 函数”是什么意思?你能举个例子吗?
  • jQuery 函数 javascript 函数,因为 jQuery javascript。
  • 当然,x="hide"; $(selector)[x]()
  • @Gracchus 发布一个演示该问题的小提琴。
  • @Gracchus 这是(大部分情况下)您的示例工作:jsfiddle.net/zavSb

标签: javascript jquery dynamic-function


【解决方案1】:

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']();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 2021-11-27
    • 1970-01-01
    • 2016-11-30
    • 2010-12-22
    相关资源
    最近更新 更多