2013-08-25 4 views
0

avoir un peu de mal avec ma jquery (comme d'habitude). J'ai besoin d'une fonction à exécuter seulement après que le premier est terminé, mais j'ai des problèmes avec la syntaxe .. J'ai lu sur .when et callbacks mais je n'arrive pas à le faire fonctionner. Je ne suis pas tout à fait sûr comment formater mes fonctions :-(Toute aideJquery .when() comment utiliser?

 $('#buttonone').hover(function() { 
      $('#descriptionone').fadeIn(400);}, 
     function() { 
       $('#descriptionone').fadeOut(400); 
     }); 


     $('#buttontwo').hover(function() { 
      $('#descriptiontwo').fadeIn(400);}, 
     function() { 
      $('#descriptiontwo').fadeOut(400); 
     }); 

Je suis vraiment confus où le .Lorsque va Toute aide serait appréciée :-)

modifier?: désolé de la confusion, je voulais dire que j'ai besoin de la deuxième fonction où '#buttontwo' hovers doit s'exécuter après la première fonction où '#buttonone' plane! Le problème en ce moment est qu'il s'exécute avant que le premier ne disparaisse et qu'il se chevauche! Merci!

+0

Comment allez-vous en cours d'exécution dans la question de chevauchement? planez-vous sur les boutons rapidement? –

+0

Merci pour la réponse! Oui, il y a chevauchement lorsque je passe trop rapidement à l'autre bouton (avant que le premier ne disparaisse). J'ai besoin d'aimer .. retarder le second de disparaître si l'autre est encore en train de disparaître ou quelque chose, comme les deux sont au même endroit et ils se chevauchent mal! Merci encore! – shanling

Répondre

1

.when est habituellement utilisé pour des événements asynchrones comme ajax, alors essayez d'utiliser la fonction de rappel fadeIn:

$('#buttonone').hover(function() { 
    $('#descriptiontone').fadeIn(
     400, 
     function() { // executed after fadeIn completes 
      buttontwoHover(); 
     } 
    ), 
    function() { 
     $('#descriptionone').fadeOut(400); 
    }); 
}); 

function buttontwoHover(){ 
    $('#buttontwo').hover(function() { 
     $('#descriptiontwo').fadeIn(400);}, 
    function() { 
     $('#descriptiontwo').fadeOut(400); 
    }); 
} 
+0

Merci pour la réponse rapide! Malheureusement, je suis vraiment dérouté par ce code, plus particulièrement la fonction après le temps de fadeIn sur la troisième ligne - pouvez-vous expliquer un peu ce que vous avez fait? Merci beaucoup! – shanling

+1

Que voulez-vous vraiment faire? Voulez-vous être capable de survoler #buttontwo (et d'exécuter ses fonctions) seulement après que #buttonone a été survolé ou voulez-vous exécuter le fadeIn depuis #descriptiontwo seulement après le fadeIn de #descriptionone? – MichaelKaeser

+0

Après ce commentaire je viens de réaliser une faille dans ma planification jquery donc ce n'est plus vraiment pertinent (u_u), mais j'aimerais quand même savoir pour l'avenir! Je veux que les fonctions de # buttontwo ne soient exécutées qu'après que # les fonctions de buttonone sont terminées et disparaissent. – shanling

1

Vous n'avez pas besoin d'utiliser des promesses ici: fadeIn prend un rappel comme second argument et ce rappel est exécuté lorsque l'évanouissement est terminé.

$('#buttontwo').hover(function() { 
    $('#descriptiontwo').fadeIn(
     400, 
     function() { // executed after fadeIn completes 
      $('#descriptiontwo').fadeOut(400); 
     } 
    ); 
}); 
+0

Oups! Désolé je devrais avoir été plus clair - j'ai besoin de toute la deuxième partie des fonctions à exécuter après la première partie des fonctions - désolé! Le fadeIn et fadeOuts fonctionnent bien :-) – shanling

+0

Hors sujet, Salut dystroy, avez-vous vu la réponse [ici] (http://stackoverflow.com/a/18419843/859154)? –

+0

@RoyiNamir Non, je n'avais pas. C'est intéressant, merci (et j'espère que vous avez éclairé la salle qui était si dure pour vous hier!). –

1
$('#buttonone').hover(function() { 
$('#descriptionone').fadeIn(
    400, 
    function() { 
      $('#buttontwo').trigger('hover');//trigger the second hover function in callback 
    } 
); 
}); 
1

DEMO

Essayez cette

Je suppose que cela c'est quoi yo tu as besoin.

var a = false; 
$('#buttonone').hover(function() { 
    $('#descriptionone').fadeIn(400); 
    a = true; 
}, 

function() { 
    $('#descriptionone').fadeOut(400); 

}); 

$('#buttontwo').hover(function() { 
    if (a == true) { 
     $('#descriptiontwo').fadeIn(400); 
    } 
}, 

function() { 
    if (a == true) { 
     $('#descriptiontwo').fadeOut(400); 
    } 
    a = false; 
}); 

Hope this helps, Merci

+0

hmm, ils se chevauchent encore - merci pour la réponse si! tellement frustrant que j'ai essayé de changer le premier 'a = vrai'; à la fadeOut de ('#descriptionone') parce que je pense que c'est là que je veux juste que soit vrai, après ('#descriptionone') a disparu! Mais je ne pense pas que ce soit vrai après que ça soit fané, juste avant ou pendant. Y a-t-il un moyen de faire 'a = true'? * après * il s'est estompé? Merci de votre aide! – shanling

+1

Je pensais que vous voulez le faire à chaque fois. de sorte qu'après que vous ayez fini de planer sur buttontwo, si vous avez le buttontwo à être plané de nouveau vous devez planer au-dessus de buttonone. – SarathSprakash

+0

Oui, je veux être capable de le faire à chaque fois, mais ils se chevauchent encore en ce moment :-( – shanling

Questions connexes