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

JS s'arrete de s'executer... [Resolu] - HTML/CSS - Programmation

Marsh Posté le 12-03-2010 à 16:36:14    

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
Reply

Marsh Posté le 12-03-2010 à 16:36:14   

Reply

Marsh Posté le 12-03-2010 à 20:30:54    

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
Reply

Marsh Posté le 14-03-2010 à 13:14:05    

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

Reply

Marsh Posté le 15-03-2010 à 08:50:49    

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
Reply

Marsh Posté le 18-03-2010 à 11:26:54    

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 ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed