2010-08-26 5 views
2

J'ai un code jQuery qui fonctionne correctement jusqu'à ce que j'ajoute la bibliothèque jQuery UI (1.7.2) et cela provoque l'échec de la méthode show() lorsque je spécifie un rappel.Ajout de sauts d'interface utilisateur jQuery jQuery show()

$('#main.home ul#promotions').show(function() { 
    if (typeof f == "function") f(); 
}); 

Il semblerait que jQuery UI remplace spectacle et maintenant je dois spécifier un paramètre supplémentaire pour « effet », le code suivant résout le problème:

$('#main.home ul#promotions').show('blind', function() { 
    if (typeof f == "function") f(); 
}); 

Cependant cela fait partie d'un script cela ne devrait pas dépendre de la bibliothèque jQuery UI donc idéalement je veux arrêter jQuery UI overriding show dans ce cas.

Quelqu'un peut-il suggérer comment cela peut être fait?

Dave

+0

Quelle version de jQuery utilisez-vous? –

+0

Bon point - c'est une ancienne version de jQuery UI aussi, bien que je l'ai utilisé (légèrement) avec 1.4.2 et n'ai pas remarqué de problèmes. – Pointy

Répondre

2

La méthode normale jQuery .show() ne prend pas un seul argument de la fonction. Il ne prend aucun argument, ou une durée et un rappel (optionnel). Ainsi, la version de jQuery UI est compatible.

Pour plain jQuery, si vous êtes intéressé à avoir .show() se produire immédiatement, je pense que vous pouvez passer un zéro zéro comme premier argument. Cependant, je ne vois pas pourquoi vous feriez cela; Si vous ne voulez pas animer, alors .show() est synchrone, et vous pouvez simplement mettre votre code "callback" juste après l'avoir appelé. En d'autres termes, il n'y a aucun intérêt à un rappel dans ce cas.

modifier — comme les points M. Craver bien informés sur sans bornes, un appel à .show() avec juste une fonction est comme appeler avec .show("normal", theFunction). Il est regrettable que le code de l'interface utilisateur de jQuery désorganise apparemment cela, mais vous pouvez coder avec "normal" comme premier argument et vous devriez être OK.

+1

En raison de la façon dont la logique est (et je suis d'accord l'API ne dit rien à ce sujet), passer juste une fonction est équivalente à '.show (" normal ", func)', donc son code actuel est en réalité 400ms animation. –

+0

Etes-vous sûr? Il me semble que la fonction est passée car l'argument "speed" sera essentiellement ignoré. Ce code est plutôt déroutant, cependant, je peux me tromper. Je regarde le petit utilitaire "speed()" dans jQuery, qui * je pense * va essayer d'utiliser la fonction comme une recherche dans le tableau de vitesse nommé. – Pointy

+0

@Pointy - Le plus simple est de tester, vous pouvez voir le comportement ici: http://jsfiddle.net/nick_craver/7sr4b/ :) –