2014-04-19 1 views
0

나는 ('slideDown', 'fadeIn'등 같은)의 jQuery 영향이 동적으로 호출해야하고이 같은 콜백 싶지 :동적 jQuery를 적용

$('#elemId').fadeIn(500, function(){ 
    alert('callback function'); 
}); 

내가 콜백을 호출하는 방법을 이런 식으로 예를 들어? 모든 효과 이름을 알고있는 경우

var effect = 'fadeIn'; // or effect = 'slideDown' 
var speed = 500; 
$('#elemId')[effect](speed); 

답변

1

당신은 JQuery와 FX-기능이 원하는처럼 그냥, 두 번째 매개 변수로 콜백을 전달할 필요가 거의 있었다 : http://api.jquery.com/fadeOut/

var aniFx = "fadeOut", 
    aniTime = 2000, 
    aniCallback = function() { alert("animation done"); }; 

$("#test")[aniFx](aniTime, aniCallback); 

작업, 예를 들어,이 바이올린을 참조하십시오 http://jsfiddle.net/p4s7s/2/

0

당신은 if/switch 문을 사용할 수 있습니다 :

var effect = 'fadeIn'; 
var speed = 500; 

if (effect === "fadeIn") 
    $('#elemId').fadeIn(speed); 
else { 
    $('#elemId').slideDown(speed); 
} 

또한 자바 스크립트로 동적 함수 이름을 전화로보고 시도 할 수 있습니다. 체크 아웃 http://derek.io/blog/2009/dynamic-function-names-in-javascript/

1

나는 가장 깨끗한 솔루션은 선택기, 효과, 속도 인수 및 콜백 함수를 사용하는 래퍼 함수를 ​​만드는 것이라고 생각합니다.

에게이 같은 것을 볼 수 있습니다

function jQueryEffect(selector, effect, speed, callback) { 
    switch(effect) { 
     case "fadeIn": 
      $(selector).fadeIn(speed, callback); 
      break; 
     // fill in other cases 
    } 
} 
+0

오, 당신은 내게 거의 똑같은 짓을 했어. ( – adaam

+0

@adaam하지만 args의 순서는 더 의미가있다. :) – Shakeel

+0

예. – adaam

0

당신이 뭔가를 할 수가 ..

var callback = function() { 
    console.log('callback'); 
} 
var dynamic = function(effect,speed, selector, callback) { 

    switch(effect) { 
     case "fadeIn": 
      $(selector).fadeIn(speed, function(){ 
       callback(); 
      }); 
      break; 

     case "slideDown": 
      $(selector).slideDown(speed, function(){ 
       callback(); 
      }); 
      break; 
    } 

} 

$(function() { 
    var effect = 'fadeIn'; 
    var speed = 1000; 

    dynamic(effect,speed,'#test',callback); 
}); 

http://jsfiddle.net/b5Svk/8/

그것을하지만 mehhhhh 할 아마도 더 나은 방법이있다!