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 :

Dans quel cas du code JS n'est pas exécuté?


Sujet :

JavaScript

  1. #1
    Membre régulier Avatar de kululu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2009
    Messages : 120
    Points : 85
    Points
    85
    Par défaut Dans quel cas du code JS n'est pas exécuté?
    Bonjour les devs

    Je vous explique ma situation:

    J'ai un code JS qui vérifie un formulaire dans mon "onsubmit"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form class="form" id="form" method="get" onsubmit="return verifForm(this)" action="creation"
    Cette methode JS marche parfaitement bien lorsque je clique sur le bouton "send".
    Mais l'utilisateur peut rentrer une liste de données: j'ai un code JS qui "clone" mon formulaire sous forme d'onglet. Par exemple si mon formulaire nécessite obligatoirement un nom il faut qu'il soit présent dans le "premier" form et le "clone" form. Le soucis arrive ici puisque le formulaire n'est plus vérifié, il semblerait que la méthode verifForm(this) n'est plus du tout lancé (alors que ce n'est pas le cas si je clone pas le formulaire). J'ai bien fait gaffe de pas avoir des champs id avec la même valeur.

    Merci de votre aide

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    le clone n'hérite pas des méthodes du form original.

  3. #3
    Membre régulier Avatar de kululu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2009
    Messages : 120
    Points : 85
    Points
    85
    Par défaut
    Merci de la réponse

    Ce que tu essaies de me dire, c'est que le code JS ne vérifiera pas le code du clone? Pourtant si clone que je laisse tout les champs vide et que je "send" il ne lance pas la vérification (logiquement le premier form devrait être vérifier quand même non?).

    Sinon y a t-il une solution à mon problème: Pouvoir dupliquer le formulaire et le soumettre a une vérification avant de le "send" ?

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    attribuer les evenements sur le form après le clone ...

  5. #5
    Membre régulier Avatar de kululu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2009
    Messages : 120
    Points : 85
    Points
    85
    Par défaut
    Comment on fait ça s'il te plait? *débutant en dev web

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    première remarque : mettre en id d'un form "form" est maladroit

    => ensuite

    modifie l'id du form après clonage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    newform= document.getElementById('myform').cloneNode(true)
    puis attribues les evenements
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    newform.id="newform"
    newform.onsubmit=function(){return verifForm(this)}

  7. #7
    Membre régulier Avatar de kululu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2009
    Messages : 120
    Points : 85
    Points
    85
    Par défaut
    Je commence à comprendre l'astuce mais je ne peux pas cloner le form, car en faite je clone juste une petite partie du form en gros:


    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <form>
    <div id="identité">
    <input /> 
    ...
    </div>
     
    <!-- c est juste ça qui est cloné -->
    <div id="autre">
    <input />
    ...
    </div>
     
    </form>

    Donc si je clone tout le form je vais me retrouver avec des choses que je voulais pas cloner.

  8. #8
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    tu modifies les id de elements de la partie clonée ?

  9. #9
    Membre régulier Avatar de kululu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2009
    Messages : 120
    Points : 85
    Points
    85
    Par défaut
    Oui par du code js comme ça

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    	var listeElementsFieldset = elementCloned.getElementsByTagName('fieldset');
    	var listeElementsDiv = elementCloned.getElementsByTagName('div');
    	var listeElementsInput = elementCloned.getElementsByTagName('input');
    	var listeElementsSelect = elementCloned.getElementsByTagName('select');
     
    	var inc = 0;
     
    	for(var i=0; i< listeElementsDiv.length  ; i++ ) 
    	{
     
    		listeElementsDiv[i].id="testDiv"+test;
    		test++;
     
    	} 
     
    	for(var i=0; i< listeElementsFieldset.length  ; i++ ) 
    	{
     
    		listeElementsFieldset[i].id="testFieldset"+test;
    		test++;
     
    	}
     
    	for(var i=0; i< listeElementsInput.length  ; i++ ) 
    	{
     
    		listeElementsInput[i].id="testInput"+test;
    		test++;
     
    	} 
     
    	for(var i=0; i< listeElementsSelect.length  ; i++ ) 
    	{
     
    		listeElementsSelect[i].id="testSelect"+test;
    		test++;
     
    	}
    C'est moche mais c'est pour tester (en sachant que ce code ne fonctionne que si je ne créé qu'un seul et unique clone si je créé un 2eme clone il va avoir les même id que le 1er clone)

  10. #10
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    sauf si tu incréementes l'id ...

    moche peut etre mais pas le choix ...

  11. #11
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Je le répète partout mais visiblement c'est loin d'être un réflexe: l'ID n'est pas le seul moyen de sélectionner des éléments en JS !
    Element unique statique : ID
    Elements multiples dans un conteneur statique : querySelectorAll et ID sur le parent
    Elements multiples un peu partout dans le DOM : Classes
    Dans tous les cas, un querySelector ne sera jamais un mauvais choix. Ca permet de retrouver le vieux réflexe des règles CSS qui est d'optimiser et sécuriser le sélecteur.

    un document.querySelectorAll("#myform .onglet.selected") par exemple résoudra beaucoup de problèmes ici

    Après plus précisément si ton problème est que ton code JS ne semble pas se lancer, c'est qu'il y a probablement une erreur Javascript qui interrompt la fonction. Peux-tu vérifier que tu ne vois rien en console d'erreurs Javascript au moment de la soumission du formulaire ?

  12. #12
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    querySelectorAll ... pour les navigateurs qui le supportent ...

  13. #13
    Membre régulier Avatar de kululu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2009
    Messages : 120
    Points : 85
    Points
    85
    Par défaut
    Aucune erreur dans la console ( j'utilise la console intégré à chrome)

    edit: j'ai même tester de réaffecter la balise form à la fin de mon code qui fait le clonage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var newform = document.getElementById("myform");
    	newform.id="myform";
    	newform.setAttribute("onsubmit","return verifForm(this)");
    et ça marche toujours pas

  14. #14
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    newform.setAttribute("onsubmit","return verifForm(this)");
    ça ne ressemble pas à ce que je t"ai suggéré ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    newform.onsubmit=function(){return verifForm(this)}

  15. #15
    Membre régulier Avatar de kululu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2009
    Messages : 120
    Points : 85
    Points
    85
    Par défaut
    Donc après mes boucles affreuses j'ai rajouter ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	var newform = document.getElementById("myform");
    	newform.onsubmit=function(){
    		return verifForm(this);
    		};
    et ça marche toujours pas
    Je ne sais pas si ça fait avancer les choses mais si j’enlève de la vérification les champs de ma partie clonable le "verifForm" se lance nickel et que je clone ou pas la partie clonable.

    EDIT: ça avance, en faite le code est bel est bien lancé (j'ai mis des alert un peu partout)
    Dans ma vérification j'ai en gros ça

    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
     
     
    function verifForm(f){
     
    	//Partie qui ne se clone pas
    	var patientinitial = textFieldIsValid(f.patientinitial);
    	var patientbirthdate = textFieldIsValid(f.patientbirthdate);
    	var patientsex = selectIsValid(f.patientsex);
    	alert("ici1");
     
    	//Partie qui peu se cloner
    	var info = textFieldIsValid(f.info);
            alert("ici2");
    	var test = textFieldIsValid(f.test);
     
     
    	if(...tout le monde est true){
    		return true;
    	}else{
    		return false;
    	}
    }
    Le code sans clonage il marche (cad que le formulaire n'est pas envoyé car les champs ne sont pas valides) on passe par "ici1" et "ici2" quand j'appuie sur send avec tous les champs vides, par contre quand je clone le code passe plus que par "ici1". Pourtant dans le code je ne modifie pas les id de l'élement original. Ce code bien sur ne permet pas de vérifier les champ du clone mais je rappelle que c'est juste pour tester.

  16. #16
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    A vrai dire je ne comprends plus grand chose ..

    si tu ne clones qu'une partie du form ...
    tu ne clones pas le form ... donc newform
    n'est pas un form ???


    sinon un exemple fonctionnel avec jquery
    http://jsfiddle.net/VDYkH/

  17. #17
    Membre régulier Avatar de kululu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2009
    Messages : 120
    Points : 85
    Points
    85
    Par défaut
    Dans ton exemple tu clone tout le formulaire.
    Dans mon cas j'ai un formulaire ou tu dois rentrer une personne (nom prénom etc) et tu peux lui rajouter des infos et misc ces derniers peuvent être répétés plusieurs fois (on pourrait dire qu'on ai des infos sur son travail puis aussi des infos sur sa santé etc...). Du coup il faut seulement que je clone la seconde partie.

  18. #18
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    un peu d'imagination que diable !!!
    http://jsfiddle.net/VDYkH/1/

  19. #19
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Je ne comprends pas tout ce que tu veux faire mais...

    onsubmit est une méthode de form
    je ne comprends pas pourquoi tu définit dynamiquement une fonction pour appeler la fonction vérif
    une affectation est beaucoup plus simple et efficace.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      var newform = document.getElementById("myform");
      newform.onsubmit=verifForm;
      };
    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
    function verifForm(){
     
    	//Partie qui ne se clone pas
    	var patientinitial = textFieldIsValid(this.patientinitial);
    	var patientbirthdate = textFieldIsValid(this.patientbirthdate);
    	var patientsex = selectIsValid(this.patientsex);
    	alert("ici1");
     
    	//Partie qui peu se cloner
    	var info = textFieldIsValid(this.info);
            alert("ici2");
    	var test = textFieldIsValid(this.test);
     
     
    	return (...tout le monde est true);
    }
    je sais que beaucoup parmis vous n'aime pas ajouter d'attribut au objet du DOM
    mais voilà ce que je ferais
    à chaque champs du formulaire j'ajouterais une méthode vérif qui vérifie le champs.
    la méthode onsubmit du form est alors simple elle fait une boucle sur tout les champs
    appelle la méthode vérif de celu-ci et retourne un AND du tout.

    ainsi on peut ajouter autant de champs que l'on veut la méthode de vérification est universelle.
    au pire on peut ajouter dans la boucle la présence du membre vérif sur le champs pour ne pas avoir à tous les traiter.

    dans ce genre j'avais posté un truc il y a quelques années
    http://www.developpez.net/forums/d85...s-autoverifes/

    A+JYT

Discussions similaires

  1. mon code php n'est pas exécuté dans l'ordre
    Par supcomingenieur dans le forum Langage
    Réponses: 6
    Dernier message: 29/05/2013, 16h56
  2. Dans quels cas est-on obligés d'utiliser des mutex ?
    Par kidpaddle2 dans le forum Threads & Processus
    Réponses: 3
    Dernier message: 18/07/2010, 20h05
  3. dans quel cas une jointure nested loops est meilleur que hash join?
    Par M_Dandouna dans le forum Administration
    Réponses: 5
    Dernier message: 08/09/2009, 15h46
  4. Mon code behind n'est pas exécuté sous Visual Web
    Par mourmaux dans le forum ASP.NET
    Réponses: 2
    Dernier message: 25/09/2008, 19h07
  5. Réponses: 14
    Dernier message: 03/04/2008, 01h44

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