2009-03-07 9 views
0

Cela me semble si difficile que je pense que je néglige quelque chose de simple ici. Pouvez-vous m'aider à le trouver?Comment puis-je retourner true/false à partir d'une file d'animation à l'intérieur d'une fonction click()?

Fondamentalement, la situation est ce (variables dont le nom n'a pas d'importance sont nommés avec une lettre majuscule):

$('a').filter('somecriteria').each(function() { 
    var self = $(this); 
    self.click(function() { 
     B.animate({ something: somevalue }, { duration: "fast", complete: function(){ 
       return true; // <--- see notes below 
      } 
     }); 
     return false; 
    }); 
}); 

Remarques: Comment puis-je laisser ce return être le return qui est envoyé à partir click() pour que l'utilisateur soit redirigé vers la nouvelle page seulement après que animate() soit complètement terminé (NB: dans mon vrai code j'ai trois animate() enchaînés). Je dois faire cela parce que l'animation est coupée et la nouvelle page est chargée prématurément. L'animation n'a d'effet que lorsque return false est envoyé depuis click() jusqu'à la fin de l'animation.

J'ai essayé de capturer l'attribut href du lien et de faire un window.location = capturedlink au lieu de return true. Cela fonctionne, mais si possible, je veux éviter cela parce que certaines personnes ont désactivé le changement de position pour des raisons de sécurité.

Ou y a-t-il une autre façon de garder jQuery en changeant une nouvelle URL au milieu d'une animation?

Merci beaucoup de vérifier cette question.

Andre

Répondre

4

j'ai peur de capturer la façon dont href serait le moyen le plus évident de faire ce que vous voulez. Je ne sais pas si cela suit contournerait les gens que l'emplacement de personne à mobilité réduite dans leurs paramètres de sécurité, mais vous pouvez essayer:

$('a').filter('somecriteria').each(function() { 
    var self = $(this); 
    self.click(function() { 
     if(self.hasClass('animated')) return true; // return true if already animated 
     B.animate({ something: somevalue }, { duration: "fast", complete: function(){ 
       self.addClass('animated').click(); // fire the click event 
      } 
     }); 
     return false; 
    }); 
}); 
+0

Je peux voir que cela devrait théoriquement fonctionner et addind une classe d'état est une astuce qui Je ne pouvais pas penser plus tôt. Mais en quelque sorte l'événement click() ne se déclenche pas. J'ai fait en sorte que la connexion soit vraiment un élément A. Merci de prendre le temps de répondre. Très appréciée! :) – andreb

+0

Si self.click(); n'a pas fonctionné essayer self.trigger ('clic'); mais je ne pense pas que cela devrait faire la différence. Je vais essayer moi-même et voir ce qui se passe ... –

+0

Je suppose que cela a à voir avec le fait que le soi soit le mauvais type d'objet ... c'est juste une supposition bien. J'aimerais pouvoir publier la source complète, mais je ne suis pas autorisé à le faire puisque la page n'est pas encore en ligne. 'console.debug ("% o ", self)' retourne '[un index.html]' dans Firebug. Donc, être un ensemble jQuery devrait suffire pour click() ... – andreb

Questions connexes