2010-12-08 5 views
0

en essayant de passer un nom de fonction en tant que variable pour l'appeler dans une fonction, etc. mais ne peut pas savoir comment l'appeler.Le rappel de la fonction passe en tant que variable

Toute aide bienvenue!

jQuery.fn.makeSlideShow = function(opts) { 

    opts = jQuery.extend({ 
     speed  :400, 
     delay  :0, 
     slideCLass :'.slide', 
     pager  :'#pager', 
     next  :'.nextSlide', 
     previous :'.previousSlide', 
     startSlide :0, 
     screenClick :false, 
     callback:function(){return false;} 
    },opts||{}); 

    // callback the fullscreenImage function here? 

}; 



$('#slideShow').makeSlideShow({ 
    callback : 'fullscreenImage' 
}); 

function fullscreenImage(){ 
    alert('called!'); 
} 

meilleur, Dan.

Répondre

1

Vous passer une chaîne littérale à votre plug-in. Vous devez passer le function reference

$('#slideShow').makeSlideShow({ 
    callback : fullscreenImage 
}); 

Dans votre code plugin, vous devez appeler cette fonction. Cela peut se faire de plusieurs façons:

opts.callback(); // default call 
opts.callback.call(scope, param1, param2, ...); // invoke makeSlideShow with a specific context and arguments 
opts.callback.apply(scope, [param1, param2, ...]); // invoke makeSlideShow with a specific context and arguments as array 
+0

ace - à bientôt! Juste pour l'avenir, comment puis-je passer les paramètres à la callback via makeSlideShow()? – v3nt

0

Si vous transmettez une chaîne, vous devez connaître l'étendue de la fonction.

window[ opts.callback ]() 

ou

window[ opts.callback ].call(this) 

Ces assumer la fonction est globale.

Il serait préférable d'exiger qu'une référence à la fonction soit passée à la place d'une chaîne.

$('#slideShow').makeSlideShow({ 
    callback : fullscreenImage 
}); 

function fullscreenImage(){ 
    alert('called!'); 
} 

alors vous faire:

opts.callback() 

ou

opts.callback.call(this) 
1

Vous devriez probablement passer l'identifiant qui décrit la fonction, plutôt qu'une chaîne avec son nom. Donc changer ceci:

$('#slideShow').makeSlideShow({ 
    callback : 'fullscreenImage' 
}); 

à ceci:

$('#slideShow').makeSlideShow({ 
    callback : fullscreenImage 
}); 
+1

S'il vous plaît commenter downvotes donc les erreurs ou les détails laissés de côté peuvent être corrigés. Downvotes pour aucune raison évidente sont juste idiot. – Jakob

0

Vous pouvez définir 'Callbeck' propety comme suit:

$('#slideShow').makeSlideShow({ 
    callback : fullscreenImage 
}); 

et que vous pouvez l'appeler comme ceci:

... 
callback() 
... 
Questions connexes