web-dev-qa-db-fra.com

JQuery Toggle State

Voici le rapide et maigre de mon problème:

$ ("a"). Bascule (fonction () {/ * Fonction A * /}, fonction () {/ * fonction B * /});

À l'intérieur function A Un formulaire est affiché. Si l'utilisateur termine avec succès le formulaire, le formulaire est à nouveau masqué (retourner à son état d'origine).

À l'intérieur function B La même forme est cachée.

La théorie derrière ceci est que l'utilisateur peut choisir d'afficher le formulaire et de le remplir, sinon ils peuvent cliquer à nouveau et faire revenir le formulaire dans la cachette.

Maintenant, ma question est la suivante: Actuellement, si l'utilisateur remplit le formulaire avec succès - et il passe à cacher - l'utilisateur devra cliquer sur le lien (( Avant de retourner à l'état bascule qui affiche le formulaire.

Est-il possible de réinitialiser par programme le commutateur à bascule à son état initial?

16
neezer

jQuery a deux .toggle() méthodes:

.toggle()

Bascule chacun de l'ensemble des éléments appariés. S'ils sont montrés, basculer les rend cachés. S'ils sont cachés, basculer les fait montrer.

.toggle(even, odd)

Basculez entre deux appels de fonction tous les autres clic.

Dans ce cas, vous voulez le premier. Quelque chose comme ça devrait faire l'affaire:

$("a").click(function() {
    $("#theForm").toggle();
});
20
foxy

Voici ce que j'ai utilisé:

$(document).ready(function() {
    $('#listing_position').click(function() {

    var div_form = $('#listing_position_input');
        if (div_form.hasClass('hide')) {
           div_form.removeClass('hide');
        } else {
          div_form.addClass('hide');
        }
    });  
});
5
Michal Zuber

Ahh, c'est les choses simples de la vie ...

J'utilisais la dernière définition de toggle(even,odd);, mais j'avais oublié d'inclure dans ma description originale du problème que ma deuxième fonction basculante cachait non seulement le formulaire, mais également la destruction.

function A: Ajax Chargez le formulaire dans une DIV annexée. Masquer et détruire la Div sur un poste de formulaire réussi.

function B: Détruisez la DIV.

Vous me rappelez tous les deux que toggle(); ne traite que la propriété CSS et, en tant que telle, elle n'est pas bien adaptée à cette tâche. Mais ensuite, j'ai réalisé que je réchauffais inutilement le formulaire sur chaque état "impair" en le détruisant quand j'ai été fait, alors je suis finalement revenu à ceci:

$ ("lien"). Cliquez sur (Fonction () {[.____] Si ($ (Ceci) .Infrings (". Form-div"). Longueur == 0) {
 // forme est non chargé; chargez et affichez le formulaire; cacher quand terminé 
} [.____]} [.____] {
 $ (". Form-div"). Basculer (); [ .____]} 
});

... ce que je veux ce que je veux faire. Merci de me mettre directement sur toggle();!

2
neezer