Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2490 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  [Resolu] JS s'arrete de s'executer...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Resolu] JS s'arrete de s'executer...

n°1973341
fabien1203
Posté le 12-03-2010 à 16:36:14  profilanswer
 

Bonjour a tous !
 
Alors je reviens avec un petit problème... Ca fait un peu plus d'un jour que je bute sur le script, sans réussir à le résoudre le problème principal... ( ca fait longtemps que je n'ai plus fait de JS  :pt1cable: )
 
Alors d'abord petite explication :
 
J'ai un formulaire qui permet de renseigner les informations d'un matériel.
Au début, une seule ligne est affiché, et si l'utilisateur veut renseigner d'autres produits, il ajoute une ligne. ( donc dynamiquement ).
Apres je vérifie que l'utilisateur a remplit tous les champs. Si l'utilisateur a oublié? un champs, je le colore en rouge. Et c'est la que ca bloque....
J'utilise une boucle pour vérifier cela, mais apres avoir vérifier le premier champs, le script s'arrete, et la page se recharge...
 
Voila le code HTML :
 

Code :
  1. <head>
  2. <script src="js/verifform.js" type="text/javascript" LANGUAGE="JavaScript"></script>
  3. </head>
  4. <body>
  5. [...]
  6. <form action="index.php" method="POST" onsubmit="return verifForm(this)">
  7.    <div class="left">
  8.    <p>Nom : <br>
  9.    <input type="text" name="nom" /></p>
  10.    <p>Prenom : <br>
  11.    <input type="text" name="prenom" /></p>
  12.    <p>Adresse : <br>
  13.    <input type="text" name="adresse" /></p>
  14.    <p>E-Mail : <br>
  15.    <input type="text" name="mail" onblur="verifMail(this)"/></p>
  16.    </div>
  17.    <div class="right">
  18.    <br>
  19.    <p>Code Postal : <br>
  20.    <input type="text" name="cp" /></p>
  21.    <p>Ville : <br>
  22.    <input type="text" name="ville" /></p>
  23.    <p>Pays : <br>
  24.    <input type="text" name="pays" /></p>
  25.    </div>
  26.    <div class="center">
  27.    <p>Société ( facultatif )<br>
  28.    <input type="text" name="societe" /></p>
  29.    <p>Numero de TVA ( si vous êtes une société assujettie ) : <br>
  30.    <input type="text" name="tva" /></p>
  31.    </div>
  32.    <fieldset>
  33.     <legend>Coordonnées des matériels à prendre en extension de garantie</legend>
  34.    <table id="produit">
  35.     <tr>
  36.      <td>N°</td>
  37.      <td>Marque</td>
  38.      <td>Référence</td>
  39.      <td>Date d’achat</td>
  40.      <td>Lieu d’achat</td>
  41.      <td>Vendeur</td>
  42.      <td>N°Série</td>
  43.     </tr>
  44.     <tr>
  45.      <td><input type="text" name="materiel0" size="5" value="0" disabled/></td>
  46.      <td><input type="text" name="marque0" size="15"/></td>
  47.      <td><input type="text" name="ref0" size="15"/></td>
  48.      <td><input type="text" name="dateachat0" size="15"/></td>
  49.      <td><input type="text" name="lieuachat0" size="15"/></td>
  50.      <td><input type="text" name="vendeur0" size="15"/></td>
  51.      <td><input type="text" name="serial0" size="15"/></td>
  52.     </tr>
  53.    </table>
  54.    <input type="button" value="Ajouter un produit" onClick="AddOneRow()" >
  55.    </fieldset>
  56.    <br>
  57.    <input type="submit" value="Valider" />
  58.   </form>
  59. [...]
  60. </body>


 
Et voici le code JS :
 

Code :
  1. var nbproduit=0;
  2. function AddOneRow(){
  3. nbproduit = nbproduit+1;
  4. var newRow = document.getElementById('produit').insertRow(-1);
  5. var newCell = newRow.insertCell(0);
  6. newCell.innerHTML = '<input type="text" name="materiel'+nbproduit+'" size="5" value="'+nbproduit+'" disabled/>';
  7. var newCell = newRow.insertCell(1);
  8. newCell.innerHTML = '<input type="text" name="marque'+nbproduit+'" size="15"/>';
  9. var newCell = newRow.insertCell(2);
  10. newCell.innerHTML = '<input type="text" name="ref'+nbproduit+'" size="15"/>';
  11. var newCell = newRow.insertCell(3);
  12. newCell.innerHTML = '<input type="text" name="dateachat'+nbproduit+'" size="15"/>';
  13. var newCell = newRow.insertCell(4);
  14. newCell.innerHTML = '<input type="text" name="lieuachat'+nbproduit+'" size="15"/>';
  15. var newCell = newRow.insertCell(5);
  16. newCell.innerHTML = '<input type="text" name="vendeur'+nbproduit+'" size="15"/>';
  17. var newCell = newRow.insertCell(6);
  18. newCell.innerHTML = '<input type="text" name="serial'+nbproduit+'" size="15"/>';
  19. }
  20. function verifForm(f)
  21. {
  22.    var nomOk = verifVide(f.nom);
  23.    var prenomOk = verifVide(f.prenom);
  24.    var adresseOk = verifVide(f.adresse);
  25.    var mailOk = verifMail(f.mail);
  26.    var cpOk = verifVide(f.cp);
  27.    var villeOk = verifVide(f.ville);
  28.    var paysOk = verifVide(f.pays);
  29.    var marque = new Array();
  30.    var ref = new Array();
  31.    var dateachat = new Array();
  32.    var lieuachat = new Array();
  33.    var vendeur = new Array();
  34.    var serial = new Array();
  35.  
  36.    for (i=0; i<2; i++) {
  37.  
  38.  var marque_i = 'f.marque'+i;
  39.  marque_i = eval(marque_i);
  40.  marque[i] = verifVide(marque_i);
  41.  //alert(marque[i]); => je recoit l'alerte
  42.  var ref_i = 'ref'+i;
  43.  ref_i = eval(ref_i);
  44.  ref[i] = verifVide(ref_i);
  45.  //alert(ref[i]); => Aucune alerte, la page se recharge après la première :/
  46.  var date_i = 'dateachat'+i;
  47.  date_i = eval(date_i);
  48.  dateachat[i] = verifVide(date_i);
  49.  var lieu_i = 'lieuachat'+i;
  50.  lieu_i = eval(lieu_i);
  51.  lieuachat[i] = verifVide(lieu_i);
  52.  var vendeur_i = 'vendeur'+i;
  53.  vendeur_i = eval(vendeur_i);
  54.  vendeur[i] = verifVide(vendeur_i);
  55.  var serial_i = 'serial'+i;
  56.  serial_i = eval(serial_i);
  57.  serial[i] = verifVide(serial_i);
  58.  }
  59.  
  60.    if(nomOk && prenomOk && adresseOk && mailOk && cpOk && villeOk && paysOk) {
  61.       return true;
  62.    }
  63.    else {
  64.       alert("Veuillez remplir les champs obligatoires" );
  65.       return false;
  66.    }
  67. }
  68. function surligne(champ, erreur)
  69. {
  70.    if(erreur)
  71.       champ.style.backgroundColor = "#fba";
  72.    else
  73.       champ.style.backgroundColor = "";
  74. }
  75. function verifVide(champ)
  76. {
  77.    if(champ.value == "" )
  78.    {
  79.       surligne(champ, true);
  80.       return false;
  81.    }
  82.    else
  83.    {
  84.       surligne(champ, false);
  85.       return true;
  86.    }
  87. }
  88. function verifMail(champ)
  89. {
  90.    var regex = /^[a-zA-Z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$/;
  91.    if(!regex.test(champ.value))
  92.    {
  93.   alert ("veuillez saisir une adresse email valide." );
  94.       surligne(champ, true);
  95.       return false;
  96.    }
  97.    else
  98.    {
  99.       surligne(champ, false);
  100.       return true;
  101.    }
  102. }


 
Auriez vous une idée du pourquoi cela beug ?
 
Et, si jamais c'est cela, est ce qu'un return false; ou return true; peut faire arreter une boucle ?
 
Merci.


Message édité par fabien1203 le 18-03-2010 à 11:30:16
mood
Publicité
Posté le 12-03-2010 à 16:36:14  profilanswer
 

n°1973400
gatsu35
Blablaté par Harko
Posté le 12-03-2010 à 20:30:54  profilanswer
 

le problème vient de cette horreur :

 
Code :
  1. var ref_i = 'ref'+i;
  2. ref_i = eval(ref_i);
  3. ref[i] = verifVide(ref_i);
  4. //alert(ref[i]); => Aucune alerte, la page se recharge après la première :/
  5. var date_i = 'dateachat'+i;
  6. date_i = eval(date_i);
  7. dateachat[i] = verifVide(date_i);
  8. var lieu_i = 'lieuachat'+i;
  9. lieu_i = eval(lieu_i);
  10. lieuachat[i] = verifVide(lieu_i);
  11. var vendeur_i = 'vendeur'+i;
  12. vendeur_i = eval(vendeur_i);
  13. vendeur[i] = verifVide(vendeur_i);
  14. var serial_i = 'serial'+i;
  15. serial_i = eval(serial_i);
  16. serial[i] = verifVide(serial_i);


au cas où voici le lien vers Jsfiddle je n'ai encore rien corrigé, j'ai juste mis un javascript:; sur le action ce qui permet de voir les erreurs sans passer à la page.

 

installer firefox, met action="javascript:;" sur ton form et test, et regarde les erreurs

 

http://www.jsfiddle.net/FbrBh/


Message édité par gatsu35 le 12-03-2010 à 20:32:33

---------------
Blablaté par Harko
n°1973639
fabien1203
Posté le 14-03-2010 à 13:14:05  profilanswer
 

Ok merci, je vais voir ca.
 
Par contre, pourquoi est ce une horreur ? ^^

n°1973816
gatsu35
Blablaté par Harko
Posté le 15-03-2010 à 08:50:49  profilanswer
 

fabien1203 a écrit :

Ok merci, je vais voir ca.
 
Par contre, pourquoi est ce une horreur ? ^^


Tu fais des eval pour générer le nom d'un champ, et surtout il n'est pas possible d'accéder à un champ de formulaire par une simple "variable".
le champ est accessible soit par son id soit par son name.
 
J'aurai mis des id en plus des name :

Code :
  1. <td><input type="text" id="ref0" name="ref0" size="15"/></td>


Et ensuite tu y accèdes par document.getElementById

Code :
  1. var ref_i = document.getElementById('ref'+i);
  2. ref[i] = verifVide(ref_i);


 
 
si on veut rester dans ton cas et utiliser les name
tu as juste à savoir que tu as ton formulaire qui contient une référence à ses éléments de formulaire enfants :  

Code :
  1. var ref_i = monForm['ref'+i];
  2. ref[i] = verifVide(ref_i);


---------------
Blablaté par Harko
n°1974845
fabien1203
Posté le 18-03-2010 à 11:26:54  profilanswer
 

C'est bon tout mon code fonctionne..
J'ai modifié tellement de chose que je ne sais plus ce que j'ai modifié... ^^
 
En tout cas, merci pour ton aide gatsu ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  [Resolu] JS s'arrete de s'executer...

 

Sujets relatifs
[Résolu] Problème de socket urlretrieve[PHP/JS] Séparer un mp3 sans plomber le serveur ?
[RESOLU] Récupération valeur bouton radio et textarea - formulaire[Résolu] Problème Http -> Https
Exécuter une commande externe avec Ada[Résolu] referencer des instances creees par une fonction...
[resolu]compatibilité ie6 ie7 mais bug anim flash[Résolu] Problème de requête
[RESOLU] pb vérification bouton radio formulaire - JS 
Plus de sujets relatifs à : [Resolu] JS s'arrete de s'executer...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR