2013-09-18 2 views
2

I've been shown как вызвать переменную javascript function s с помощью window[]().вызов переменной jQuery function

Можно ли вызвать переменную jQuery function s? Если да, то как?

Обычно мне нужно только трехкомпонентной переворачивать видимый переключатель, и это было бы очень удобно smush много строк кода в 1. Например, внутри $.aja()success:

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

Это, вероятно, плохой пример, так как boolean может быть передан slide() или что-то в этом роде, но я хотел бы использовать концепцию в связанном выше вопросе.

Это не работает для меня: функции

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

Что вы подразумеваете под «переменной вызова jQuery functions»? Не могли бы вы привести пример? – bfavaretto

+0

Функции jQuery ** являются ** функциями javascript, поскольку jQuery ** является ** javascript. –

+0

уверен, 'x =" hide "; $ (selector) [x]() ' – georg

ответ

5

Jquery еще только функции JavaScript, так что одни и те же правила применяются к ним, как и любые другие функции JS.

Вы можете вызывать методы объекта objectVar следующим образом:

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

Ваш вопрос упоминал об использовании window[]() - это относится и к глобальным функциям, так как они являются по существу свойства window (при использовании JS в браузере, из курс).

В случае JQuery, вы можете сделать это таким образом:

var methodName = "hide"; 
$(someSelector)[methodName](); 
$(someSelector)[anyJSExpressionThatReturnsAStringThatIsAjQueryMethod](); 

EDIT: Я только что видел новую версию этого вопроса. Строка кода, показанная оператором ?:, выбирая имя метода, должна давать тот же эффект, что и if/else. Я сам использовал аналогичный код без проблем, и он отлично работает в the fiddle that Jason P provided. Обратите внимание, что, так как ваша мотивация здесь, кажется, о том, чтобы код короче, вы можете опустить все скобки из выражения в [] и просто сделать это:

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

... или даже опустить > 0 часть, так как msg.length будет правдивым, если отличное от нуля:

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