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

JavaScript Discussion :

Soumettre formulaire depuis Input type="text"


Sujet :

JavaScript

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 731
    Par défaut Soumettre formulaire depuis Input type="text"
    Bonjour,

    Pour un panier, j'ai un formulaire avec des input text afin de saisir les quantités.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <form method="post" action="s.php">
    <p><input type="text" name="référence_article sélectionné" value="1" />NOM du machin</p>
    Un fois la quantité saisie, il faut cliquer sur un bouton "Recalculer" pour faire la mise à jour.
    Certains utilisateurs voudraient que la mise à jour soit automatique quand ils ont saisi la quantité.

    Je ne suis pas sûr que ce soit une bonne idée, mais étant nul en javascript je ne sais pas comment faire.

    Quel événement détecter ?
    Petite phrase magique ?

    Merci d'avance.

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 210
    Par défaut
    Bonjour,
    sur l'événement onchange de l'input tu appelles la fonction de mise à jour.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 731
    Par défaut
    Bonjour,

    Merci de ta réponse.

    Je suis nul en javascript mais j'ai l'impression que ton truc ne vas pas.

    Par défaut, la valeur est 1.
    Si l'utilisateur veut taper 100, onchange ne va-t-il pas s'appliquer dès 10 ?

    Je n'ai pas de script à appeler.
    Il faut juste faire comme si le bouton "Recalculer" avait été cliqué, sachant qu'il existe un autre bouton "Valider" sur le même formulaire.

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 210
    Par défaut
    Par défaut, la valeur est 1.
    Si l'utilisateur veut taper 100, onchange ne va-t-il pas s'appliquer dès 10 ?
    il suffit de faire des essais pour ce rendre compte.

    Ton bouton Recalcul à bien une action sur son événement onclick du style onclick="Recalcul();", c'est cela qu'il faut mettre sur l'événement onchange de ton input.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 731
    Par défaut
    Re-bonjour,

    Il n'y a aucun code javascript dans le bouton "Recalculer".

    C'est un formulaire html qui envoie à un script PHP.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut
    En utilisant l'ajax....
    Par ex, sur l'évènement onblur de ton champ input text.. Tu appel une méthode javascript qui lui fait un traitement ajax...

    Actuellement je suis sur un projet où j'ai développé une IHM avec une gestion de colis contenant des articles. Donc j'avais des boutons "ajouter" et "retirer" qui chacun faisait appel à des méthodes ajax.

    Donc là pour ton cas, tu peux à mon avis, utiliser l'évènement onblur, c'est à dire qu'à chaque fois que l'utilisateur sort du champ, donc forcement quand il va cliquer...tu fais appel à une méthode ajax qui met à jour ton panier...

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 731
    Par défaut
    Merci de ta réponse :

    En utilisant l'ajax....
    Par ex, sur l'évènement onblur de ton champ input text.. Tu appel une méthode javascript qui lui fait un traitement ajax...
    Ok pour onblur, mais je ne sais pas ce qu'est un traitement ajax...

    Dans mon esprit, une petite phrase magique javascript devrait suffire.

    Si onblur, on fait comme si le bouton "Recalculer" avait été cliqué.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut
    ok.
    Si j'ai bien compris, ton bouton recalculer, envoi le formulaire html et fais les traitements en php.

    Si c'est bien ça.

    Il te suffit d'écrire ça en javascript :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    function methodeAppelerDansOnBlur() {
    document.form.submit();
    }
    Bien évidemment la syntaxe de document.form est à revoir selon ton code.
    Mais le principe est là, dans ta fonction javascript qui sera appelé dans l'evenemetn onblur, tu met ce bout de code qui va envoyer le formulaire.

    Car j'imagine que ton bouton recalculer c'est un simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input type="submit" value="recalculer"/>
    Si c'est ça le bouton de code ci-dessus te suffira..

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 731
    Par défaut
    Bonjour,

    Merci de ta réponse

    Effectivement, le bouton submit est bien comme tu dis.

    Par contre, il y a plusieurs form dans la page et la soumission par onblur doit s'appliquer uniquement aux input type="text" d'un seul formulaire.

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut
    ok.
    donc tu dois récupérer le nom de ton formulaire et faire dans la méthode javascript : Il faut bien mettre le nom de ton formulaire si tu en a plusieurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    document.formSaisie.submit();

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 731
    Par défaut
    Merci de ta réponse,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    document.formSaisie.submit();
    formSaisie est le nom du formulaire ?

    Il me suffit d'ajouter dans le code html des input type="text" concernés

    onblur="document.formSaisie.submit()"

    C'est aussi simple que de déclarer une fonction, non ?

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut
    oui c le nom du formulaire.
    tu met tes input à l'intérieur de ton formulaire.

    puis pour chaque input, tu appel ta méthode javascript sur la méthode onblur.
    et ça devrait faire l'affaire.

  13. #13
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 210
    Par défaut
    Il faut juste faire comme si le bouton "Recalculer" avait été cliqué, sachant qu'il existe un autre bouton "Valider" sur le même formulaire.
    faut il en conclure qu'il y a 2 boutons qui soumettent dans ta form?

  14. #14
    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 : 55
    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
    Une autre question à se poser est : as-tu vraiment besoin d'un aller-retour vers le serveur pour effectuer un simple calcul ? JavaScript peut le faire facilement...
    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

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 731
    Par défaut
    Merci de vos réponses.

    faut il en conclure qu'il y a 2 boutons qui soumettent dans ta form?
    OUI
    Il y a le bouton "Recalculer" qui met à jour les valeurs en restant sur la même page et le bouton "Valider" qui met aussi à jour les valeurs mais en passant à l'étape suivante.

    onblur doit activer le boutons "Recalculer" et donc la petite phrse à laquelle j'avais pensé n'est pas suffisante.

    onblur="document.formSaisie.submit()"

    Il faut préciser que le submit s'opère avec le bouton "Recalculer".

    as-tu vraiment besoin d'un aller-retour vers le serveur pour effectuer un simple calcul ? JavaScript peut le faire facilement...
    Il est possible de sortir de cette page pour envoyer un mail ou consulter les Conditions de vente ou ajouter des produits.
    Il faut donc que toute modification du formulaire soit enregistrée au niveau serveur, c'est d'ailleurs très rapide.

  16. #16
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 210
    Par défaut
    onblur="document.formSaisie.submit()"
    si tu dois faire des aller/retour autant utiliser l'événement onchange
    petit fichier de test pour te rendre compte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Test &eacute;v&eacute;nement</title>
    </head>
    <body>
    <div>
    <input type="text" value="onchange" onchange="alert(this.value);"><br>
    <input type="text" value="onblur"   onblur  ="alert(this.value);"><br>
    <input type="text" value="onclick"  onclick ="alert(this.value);"><br>
    </div>
    </body>
    </html>
    tu te rendra compte que même si c'est rapide tu n'en feras que quand cela est utile

    quoi qu'il arrive, si la fonction attachée aux 2 boutons est la même, elle est traitée différemment côté serveur, oui mais comment dans ce cas. Mais la pas sûr d'avoir bien saisi...

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 731
    Par défaut
    Bonsoir,

    Merci de ton test.

    En fait, je ne vois pas la différence entre onchange et onblur.

    Dans les deux cas, tu es obligé de sortir de l'input et de cliquer sur la page pour provoquer l'événement, ce qui n'est pas un comportement naturel, autant obliger à cliquer sur recalculer.

    Autrement, pour te rendre compte, il s'agit du site touslescables.com.


    http://www.touslescables.com/


    Ajoute un ou mieux plusieurs produits au panier pour voir la page "Touslescables.com : Validation quantités".

    Autrement, ce sont quelques utilisateurs qui suggèrent la mise à jour automatique car ils ont vu ça ailleurs, mais dans des sites où l'ergonomie d'achat est différente.

    Je ne suis pas sûr que ce soit une bonne idée pour l'ergonomie de touslescables.com mais je réfléchis au problème (avec votre aide).

    L'avantage d'une mise à jour non-automatique et que tu peiux d'abord constituer ton panier, pusi préciser les qiuantités, puis valider en une seule fois.

  18. #18
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 210
    Par défaut
    En fait, je ne vois pas la différence entre onchange et onblur.
    - onchange n'est déclenché que si le contenu change entre la prise de focus et la perte de focus
    - onblur est déclenché à chaque fois que l'élément perd le focus
    donc si l'on se déplace par tabulation il peut y avoir des échanges inutiles, ce n'est pas le cas, dans ton cas puisque le déplacement par tabulation n'est pas prévu.

    Concernant le lien fourni, effectivement il y a soumission dans les deux cas avec coté serveur récupération de la value du name="choix", donc sauf à mettre une simulation de click, pas sûr que cela soit encore autorisé, un document.form.submit() est insuffisant.

    Le faire en javascript embarqué n'est pas non plus réalisable rapidement il te manque une donnée à savoir le prix unitaire. cela nécessite un peu plus qu'un correctif.

    Autrement, ce sont quelques utilisateurs qui suggèrent la mise à jour automatique car ils ont vu ça ailleurs, mais dans des sites où l'ergonomie d'achat est différente.
    ils ont forcément raison...bien que sur ce genre de site c'est le besoin qui est important et non pas le coût, en premier lieu s'entend.

    Ils ne savaient pas que c'était impossible, alors ils l'ont fait.
    Mark Twain.

    Merci les papillotes...

  19. #19
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 731
    Par défaut
    Merci beaucoup de tes commentaires.

    Je continue à réfléchir...

  20. #20
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 210
    Par défaut
    as tu essayé ceci, donc sauf à mettre une simulation de click?

Discussions similaires

  1. Réponses: 5
    Dernier message: 15/12/2008, 17h15
  2. formulaire avec input type="file"
    Par Naksh-i dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 24/10/2006, 08h51

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