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 :

document.frm.submit() inactif


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2004
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 7
    Points : 5
    Points
    5
    Par défaut document.frm.submit() inactif
    Bonjour a tous,

    C'est pas compliqué mais louche

    Voila 2 fonction javascript qui verifie les champs d'un formulaire.
    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
    function verifArt(){
    	var nbChp = document.frm.length;
    	var chk = 0;
    	for (var i=0; i<=nbChp-2; i++){//tous les chp st necessaire, on les verif tous
    		if (document.frm.elements[i].value==''){
    			alert ('Vous avez oublié de saisir un champ!!!! '+i);
    		}
    		else {
    			chk++;
    		}
    	}
    	if (chk==nbChp-1){	
    		document.frm.envoi.value='article';
    		document.frm.submit();
    	}
    }
     
    function verifCmd(){
    	var nbChp = document.frm.length;
    	var chk = 0;
    	for (var i=0; i <= nbChp-2; i++){
    		if ((i!=1)||(i!=3)||(i!=4)){//On passe sur les champs non stockés ds la table cmd
    			if (document.frm.elements[i].value==''){
    				alert ('Vous avez oublié de saisir un champ!!!! '+i);
    			}
    			else {
    				chk++;
    			}
    		}
    	}		
    	if (chk==nbChp-1){
    		document.frm.envoi.value='commande';
    		document.frm.submit();
    	}
    }
    Et voici les bouton qui les appelles:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <input name="article" type="button" value="Créer l'article" onClick='verifArt();'>
    <input name="commande" type="button" value="Enregistrer la commande" onClick='verifCmd();'>
    <input name="envoi" type="hidden">
    L'input hidden sert pr le php qui envoie les données necessaires à la base

    Lorsque l'utilisateur clic, la fonction appelée doit verifier certains champs, si ils sont tous remplis alors la fonction doit envoyer le formulaire "frm", mais rien ne se passe, meme pas une erreur ds la console de debug de Firefox, ni ds IE d'ailleurs.
    J'ai vérifié la condition d'entrée ds le dernier if et elle est bonne c'est a dire que "chk==nbChp-1".
    Sur ma page j'ai 2 form, le 1er "frm" et le 2e "class" qui apparait qu'apres avoir envoyé le 1er.
    J'ai aussi vérifié qu'aucun autre element porte le meme nom que "frm".
    Et essaye avec document.forms[0].submit().
    En bref rien ne marche et aucune erreur n'est affichée.

    Merci d'avance pour vos réponses.

  2. #2
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut Re: document.frm.submit() inactif
    Citation Envoyé par jaybebop
    var nbChp = document.frm.length;
    Un formulaire n'a pas de longueur (enfin à ce que je sache). Ce qui t'interesse c'est la longueur de document.frm.elements....

    D'ou nbChp=null et tous les tests deviennent faux.

    Sinon, prefere toujours un document.getElementById() pour retrouver ton formulaire, en lui assignant un id, plutot que de tenter de passer par les noms.....

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2004
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    pourtant si je fait
    il m'affiche 12, soit le nb d'éléments contenus ds le formulaire frm, 10 champs + 2 boutons, d'où le nbChp-1 ds la condition du if, car quand on clic sur le bouton, il prend une valeur (dc chk = 11 si tous les chps sont renseignés), seul le 2eme bouton n'a pas de valeur.
    De plus, la valeur du champ caché est bien modifiée, donc la condition du if est VRAIE, donc le submit devrai s'executer.
    Cependant "document.frm.elements.length" marche aussi

    J'ai essayé avec "document.getElementById["form"].submit()", mais il me fait une erreur
    Erreur : document.getElementByID has no properties
    Fichier Source : http://localhost/Stage2/createArt.php
    Ligne : 39
    Et pourtant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form id="form" name="frm" action="<? echo $PHP_SELF ?>" method="post">
    J'ai l'impression d'etre ds la 12éme dimensions

    PS:J'ai mis une l'extension Javascript Debugger a FireFox, j'ai mis des break au niveau du submit() et de la condition, et tout est normal, aucune exceptions n'est tracé ni aucune erreurs.

    EDIT: J'avais essayé avec des parentheses, mais sa me faisait aussi une erreur (justement un truc du genre "is not a function", oui oui je suis bien ds la 12eme dimension ), et du coup je me suis dit sa doit etre avec des crochets.

  4. #4
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    document.getElementById('form')

    C'est une fonction, pas une liste....

    Sinon, pour le reste, ben, je vois pas trop

  5. #5
    Futur Membre du Club
    Inscrit en
    Avril 2004
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Finalement j'ai réussi à m'en sortir
    voici la solution:
    Les 2 fonctions legerement remaniées (au passage verifCmd etat logiquement fausse)
    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
    function verifArt(){
    	var nbChp = document.getElementById('idform').elements.length;
    	var chk = 0;
    	for (var i=0; i<=nbChp-2; i++){
    		if (document.getElementById('idform').elements[i].value==''){
    			alert ('Vous avez oublié de saisir un champ!!!! '+i);
    			return false;
    		}
    		else {
    			chk++;
    		}
    	}
    	if (chk==nbChp-1){	
    		return true;
    	}
    }
     
    function verifCmd(){
    	var nbChp = document.getElementById('idform').elements.length;
    	var chk = 0;
    	for (var i=0; i <= nbChp-2; i++){
    		if ((i==1)||(i==3)||(i==4)){//On passe sur les champs non stockés ds la table cmd
    			chk++;
    		}
    		else {
    			if (document.getElementById('idform').elements[i].value==''){
    				alert ('Vous avez oublié de saisir un champ Cmd!!!! '+i);
    				return false
    			}
    			else {
    				chk++;
    			}
    		}
    	}
    	if (chk==nbChp-1){
    		return true;
    	}
    }
    Une nouvelle fonction appelant les 2 premieres au choix:
    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
    function verification(){
    alert("entree")
    if (document.getElementById('idform').envoi.value=='article'){
    alert("entree art")
    	if (verifArt()){
    	alert("okArt")
    		return true;
    	}
    	else {return false;}
    }
    if (document.getElementById('idform').envoi.value=='commande') {
    alert("entreeCmd")
    	if (verifCmd()){
    	alert("okCmd")
    		return true;
    	}
    	else {return false;}
    }
    }
    Appellée sur un submit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form id="idform" name="frm" action="<? echo $PHP_SELF ?>" method="post" onsubmit='return verification();'>
    Et les boutons submit qui modifie la valeur d'un hidden, qui sert a savoir sur quel bouton on a cliqué pour appeler la bonne fonction de vérification.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <input name="article" type="submit" value="Créer l'article" onClick="document.getElementById('idform').envoi.value='article';">
    <input name="commande" type="submit" value="Enregistrer la commande" onClick="document.getElementById('idform').envoi.value='commande';">
    <input name="envoi" type="hidden">
    Voilà, maintenant pourquoi ca ne marchait pas auparavant
    ? : ? ? : ?

  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
    tout réside dans le qui retournerait le nombre d'objets ayant pour nom frm sur ta page ...
    que tu as remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('idform').length
    qui retourne le nombre d'éléments dans le formulaire d'id 'idform'...
    si tu as plusieurs éléments de nom frm cela deviendrait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.frm[0].elements.length

  7. #7
    Futur Membre du Club
    Inscrit en
    Avril 2004
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par SpaceFrog
    tout réside dans le qui retournerait le nombre d'objets ayant pour nom frm sur ta page ...
    que tu as remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('idform').length
    qui retourne le nombre d'éléments dans le formulaire d'id 'idform'...
    si tu as plusieurs éléments de nom frm cela deviendrait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.frm[0].elements.length
    Et pourtant le résultat retourné par "document.frm.length" est le meme que celui retourné par "document.getElementById('idform').length"

  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
    parceque par un grand hasard tu as le même nombre d'éléments qui portent le name frm que tu as d'objets dans le formulaire ? ... ???

  9. #9
    Futur Membre du Club
    Inscrit en
    Avril 2004
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Voila le code HTML, pour mettre les chose au clair
    <body>
    <h4 class="Style1">Saisissez les informations concernant l'article commandé : </h4>
    <form id="idform" name="frm" action="" method="post" onsubmit='return verification();'>
    <table class="Style1" width="371" border="0">
    <tr>
    <td width="143">R&eacute;f&eacute;rence : </td>
    <td width="218"><input name="Ref" type="text" size="10" maxlength="10" value="" ></td>
    </tr>
    <tr>
    <td width="143">Libell&eacute; : </td>
    <td width="218"><input name="Label" type="text" size="20" maxlength="20" value="">*</td>
    </tr>
    <tr>
    <td>Prix unitaire HT :</td>
    <td><input name="prix" type="text" size="20" value=""></td>
    </tr>
    <tr>
    <td> TVA : </td>
    <td><input name="TVA" type="text" size="20" value="" onBlur=document.forms[0].prixTTC.value=ttc(document.forms[0].prix.value,document.forms[0].TVA.value)>*</td>
    </tr>
    <tr>
    <td>Prix TTC : </td>
    <td><input name="prixTTC" type="text" disabled size="20" value="0">*</td>
    </tr>
    <tr>
    <td>Unit&eacute; : </td>
    <td><select name="unite">
    <option>Choix de l'unit&eacute; ...</option>
    <option value='Unite 1'>Unite 1</option>
    <option value='Unite 2'>Unite 2</option>
    <option value='Unite 3'>Unite 3</option>
    <option value='Unite 4'>Unite 4</option>
    <option value='Unite 5'>Unite 5</option>
    </select></td>
    </tr>
    <tr>
    <td>Quantit&eacute; : </td>
    <td><input name="Qte" type="text" size="20" value=""></td>
    </tr>
    <tr>
    <td>Fournisseur : </td>
    <td><select name="Fournisseur">
    <option>Choix du fournisseur ...</option>
    <option value=F1>Nom 1</option>
    <option value=F10>Nom 10</option>
    <option value=F11>Nom 11</option>
    <option value=F12>Nom 12</option>
    <option value=F13>Nom 13</option>
    <option value=F14>Nom 14</option>
    <option value=F15>Nom 15</option>
    <option value=F16>Nom 16</option>
    <option value=F17>Nom 17</option>
    <option value=F18>Nom 18</option>
    <option value=F19>Nom 19</option>
    <option value=F2>Nom 2</option>
    <option value=F20>Nom 20</option>
    <option value=F21>Nom 21</option>
    <option value=F22>Nom 22</option>
    <option value=F23>Nom 23</option>
    <option value=F24>Nom 24</option>
    <option value=F25>Nom 25</option>
    <option value=F3>Nom 3</option>
    <option value=F4>Nom 4</option>
    <option value=F5>Nom 5</option>
    <option value=F6>Nom 6</option>
    <option value=F7>Nom 7</option>
    <option value=F8>Nom 8</option>
    <option value=F9>Nom 9</option>
    </select></td>
    </tr>
    <tr>
    <td>Date d'achat : </td>
    <td><input name="dateAchat" type="text" value="">
    <script type="text/javascript">
    var cal1 = new calendar("FIELD:document.frm.dateAchat;FORMAT:1;");
    cal1.aryDays = Array("Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam");
    cal1.aryMonths = Array("Janvier", "Février",
    "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre",
    "Décembre");
    cal1.writeCalendar();
    </script>
    </td>
    </tr>
    <tr>
    <td>Lieu de stockage : </td>
    <td><select name="Lieu">
    <option>Choix du lieu de stockage ...</option>
    <option value=CFA>CFA</option>
    <option value=CFC>CFC</option>
    </select></td>
    </tr>
    </table>
    <div align="left">
    <input name="article" type="submit" value="Créer l'article" onClick="document.getElementById('idform').envoi.value='article';">
    <input name="commande" type="submit" value="Enregistrer la commande" onClick="document.getElementById('idform').envoi.value='commande';">
    <input name="envoi" type="hidden">
    </div>
    </form>

    </body>
    Comme tu peux le voir, aucun element ne porte le nom "frm", a part le formulaire.
    Alors soit j'ai pas compris ce que tu m'as dit, soit je suis ds la 12éme dimensions

  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
    en effet ???

    document.frm.length est la taille de la collection des objets (ayant un name) qu'il contient ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment sysnchronier 2 document.form.submit
    Par marti dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 07/07/2006, 10h24
  2. [PHP-JS] Document.form1.submit();
    Par philippe30 dans le forum Langage
    Réponses: 4
    Dernier message: 11/12/2005, 12h33
  3. [form] document.monForm.submit() !?!
    Par FrankOVD dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/11/2005, 01h13
  4. document.monForm.submit(); ... marche pas
    Par FrankOVD dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 31/10/2005, 16h13
  5. document.frm.submit() je deviens fou
    Par franak dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 25/03/2005, 17h23

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