IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

form.trigger('submit') : comment récupérer la validité du formulaire ?


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut form.trigger('submit') : comment récupérer la validité du formulaire ?
    Bonjour,

    Lors d'un clic sur un onglet, je dois lancer une soumission du formulaire de ma page. Cela se passe assez simplement de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $('.onglets a').click(function() {
        $('form').trigger('submit');
    });
    Ceci marche bien dans la mesure où :
    • lors du clic, mon formulaire est soumis
    • si le formulaire est valide, il est enregistré

    Pour information, la validation se fait en PHP et l'enregistrement aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    <?php // Controller
            $id   = Config::getGetParameter('id');
            $post = Config::getPostParameter('evenement');
            $files = Config::getFiles('evenement');
     
            $form = new EvenementForm($id, $post, $files);
            if ($post) {
                    $form->bind($post);
     
                    if ($form->isValid()) {
                            $form->save();
                            $form = new EvenementForm($id);
                            $notice = "<div id=\"succes\">Le formulaire a été sauvé</div>";
                    } else {
                            $notice = "<div id=\"erreur\">Le formulaire n'est pas valide</div>";
                    }
            }
    ?>
    Le seul problème que je rencontre viens de la règle métier suivante :
    • lorsque le formulaire n'est pas valide, je dois rester sur la page courante et afficher un message d'erreur

    Effectivement, comment puis-je récupérer un quelconque résultat depuis l'événement lancé par mon trigger ?

    Merci de toute piste !

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut


    Via un événement...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $('form').on('submit', callback);
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut
    Je ne suis pas sûr de comprendre ta réponse. Si je fais un callback sur le submit de mon formulaire, je n'ai toujours pas moyen de récupérer une réponse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            $('.onglets a').click(function() {
                $('form').trigger('submit');
            });
     
            $('form').on('submit', function() {
                alert($('.success').attr('id'));
                return true;
            })
    (ici, je tente de lire si la balise id='success' existe ; mais cela ne doit pas être correct ?)

    En fait, pour être plus clair, j'aurais aimé pouvoir faire un comportement semblable à cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            $('.onglets a').click(function() {
                var page = $('form').trigger('submit');
                var is_valid = page.find('.success');
            });

  4. #4
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonsoir

    Citation Envoyé par bilbonec Voir le message
    Le seul problème que je rencontre viens de la règle métier suivante :
    • lorsque le formulaire n'est pas valide, je dois rester sur la page courante et afficher un message d'erreur
    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    $( "form" ).submit( function(){
    	var str = $( this ).serialize(),
    		jqXHR = $.post( "fichier.php", str );
     
    	jqXHR.done( function( data, textStatus, jqXHR ){
    		// succès de la transaction, on doit traiter le contenu de data
    		console.log( data, textStatus, jqXHR );
     
    		if ( $( "form" ).find( "#success" ).length != 1 ){
    			// La division d'ID "success" n'existe pas !
     
    		}
    	});
     
    	jqXHR.fail( function( jqXHR, textStatus, errorThrown ){
    		// échec de la transaction, gérer la catastrophe
    		console.log( jqXHR, textStatus, errorThrown );
     
    	});
     
    	return false;
    });

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut
    Bonjour,

    J'avais voulu tenter ça un moment donné, mais serialize() ne prend en compte que les champs et pas les fichiers uploadés.

    Après avoir tourné pas mal autour du problème, j'en suis maintenant à la solution (que je n'aime pas trop mais qui est censée fonctionner) de :
    1. passer en session mon adresse de redirection
    2. une fois le formulaire traité par PHP, rediriger la page vers cette variable de session

    Il me reste seulement une question à résoudre, qui est de savoir pourquoi la variable que je met en session par un appel Ajax n'est pas accessible ensuite en PHP.

    Le code est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    // Gestion des onglets :
    $('.onglets a').click(function(event) {
        event.preventDefault();
     
        //  - demande d'ajout d'une redirection en session
        $.ajax({
            type: 'POST',
            dataType: 'json',
            data: { redirect: $(this).attr('href') },
            url: '/evenement/sessionManager.php'
        });
     
        // Soumission du formulaire
        $('form').trigger('submit');
    });
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    // sessionManager.php
    Config::setSessionParam(
    	'redirect',
    	Config::getPostParameter('redirect')
    );
    Et finalement coté PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    <?php // Controller
    	$id   = Config::getGetParameter('id');
    	$post = Config::getPostParameter('evenement');
     
    	$form = new EvenementForm($id, $post);
    	if ($post) {
    		$form->bind($post);
     
    		if ($form->isValid()) {
    			$id = $form->save();
     
                            // L'instruction suivante ne marche pas
    			if ($redirect = Config::consumeSessionParam('redirect')) {
    				header('Location: /evenement/' . $redirect);
    			} else {
    				$form = new EvenementForm($id) ;
    				$notice = notice_success();
    			}
    		} else {
    			$notice = notice_error();
    		}
    	}
    ?>
    Sauf que je ne retrouve jamais la variable redirect quand je la lis en PHP.

Discussions similaires

  1. Comment récupérer les données de formulaires
    Par pracede2005 dans le forum Struts 2
    Réponses: 1
    Dernier message: 03/09/2012, 14h30
  2. Réponses: 2
    Dernier message: 08/05/2009, 18h00
  3. Réponses: 4
    Dernier message: 26/09/2006, 13h57
  4. Réponses: 2
    Dernier message: 07/06/2006, 08h42
  5. Comment récupérer les coordonnées sur le bureau d'une form ?
    Par fma2112 dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 22/02/2006, 23h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo