2010-09-03 7 views
0

J'utilise jQuery.form plugin à .ajaxSubmit() entre div popping dans et hors de vue (à des fins de journalisation et parfois de validation). L'utilisateur peut naviguer en avant et en arrière. Certains des div ont des données complètes, auquel cas j'utiliserais la div parent du formulaire comme target:. Cependant, les autres div contiennent du texte et des boutons de navigation, et ils n'ont pas besoin d'être mis à jour (juste .hide() après que l'ajaxSubmit ait retourné une chaîne indiquant que le prochain identifiant div apparait). Si j'utilise $(this).parent('div') comme cible, la div entière est remplacée par la chaîne renvoyée. Cette chaîne est uniquement utilisée pour remplir un élément caché afin de faciliter la navigation à travers ces écrans/div.jquery.form mettre à jour la cible de temps en temps

$('.CSRForm').submit(function() { 
    $(this).ajaxSubmit({ 
     target: $(this).parent('div'), //for validation purposes on the forms with data 
     success: StepCall //to check whether the response is valid for redirecting; and logging 
    }); 
    return false; 
}); 

function StepCall(responseText, statusText, xhr, $form) { 
    if (responseText != "Negatory") { //"Negatory" would indicate no navigation 
     $form.parent('div').css("display", "none"); //doesn't seem to work, neither does "hide()" 
     $('#' + responseText).css("display", "block"); 
    } 
} 

Aussi, je ne suis pas sûr si j'utilise correctement $form dans le rappel .ajaxSubmit success. Est-ce que quelqu'un sait? Le website n'est pas clair.

+0

Qu'est-ce que '$ form'? – SLaks

+0

encore, le site Web n'est pas vraiment clair. ma meilleure estimation est que c'est un wrapper d'objet jQuery pour le formulaire DOM. Et je ne sais pas comment l'utiliser dans ce contexte pour obtenir le div parent de ladite forme et le cacher. –

Répondre

0

$ form est une référence enveloppée à votre formulaire d'appel.

La cible $(this).parent('div') a été mise à jour avec la réponse, avant que votre fonction de succès ne soit appelée.

Votre formulaire de déclenchement a été remplacé par une réponse xhr. Le $ form.parent dans votre méthode de succès traverse une erreur, car la référence à $ form n'est plus valide, ...

+0

Oui, je vois ça maintenant. Bonne observation. – hydrogen

0

Je pense que $ form ici serait un objet jQuery. Je pense que ce serait une bonne idée de jeter cet objet à la console pour savoir si l'objet est là (juste pour la santé mentale). Si vous utilisez firebug, je crois que l'utilisation de console.log() dans votre JS devrait fonctionner.

succès

fonction de rappel à appeler après le formulaire a été soumis. Si une fonction de rappel 'succès' est à condition qu'elle soit invoquée après que la réponse a été renvoyée par le serveur . Il est passé les arguments suivants:

  1. 1.) responseText ou valeur responseXML (en fonction de la valeur de l'option dataType).
  2. 2.) statusText
  3. 3.) xhr (ou l'élément de forme enveloppée jQuery si l'on utilise jQuery < 1,4)
  4. 4.) élément de forme enveloppée jQuery (ou indéfini si l'on utilise jQuery < 1.4)

Donc il devrait certainement vous être passé en tant qu'objet jQuery. Je suppose que si vous utilisez jQuery < 1.4, vous avez des problèmes cependant.

+0

J'ai essayé console.log(); avant et après la ligne avec $ form, et commuté à l'onglet Console dans Firebug - Je n'ai rien vu d'autre que le post. J'utilise jQuery 1.4.1 –

+0

Essayez le paramètre xhr? – hydrogen

+0

Depuis, j'utilise 1.4.1, ce ne serait pas la forme enveloppée, mais le xhr lui-même, qui n'aurait aucun moyen de référencer le div parent –

Questions connexes