Controle de saisie (boucle)

jagogordonne Messages postés 29 Date d'inscription mardi 9 décembre 2008 Statut Membre Dernière intervention 7 janvier 2011 - 24 déc. 2010 à 09:48
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 - 7 janv. 2011 à 17:26
Bonjour à tous sur mon application je voudrais rajouter un controle de saisie de l'utilisateur. Il ne faudrait pas qu'il puisse saisir 2 fois le meme numéro chose simple mais là je beug un petit coup de pouce svp ...

Voilà ma fonction qui marche très bien ;)=>
function Volume_total() {
var nb_arbre = document.getElementById('nombre_arbre_prerempli').value;
var i = 0;
var total = 0;
var compt = 0;
while (i != nb_arbre) {
var arbre = document.getElementById('menu'+i+'3').value;
if (arbre!="") {
test= function () {
sucrer_espaces(arbre); }
total = total+parseFloat(arbre);
compt++;
}
i++;
}
total=(total.toFixed(3));
document.getElementById('volume_reel_prerempli').value=total;
alert ("Vous avez abattu "+compt+" arbre");
document.getElementById('arbre_abattu_prerempli').value=compt;
}

Et je voudrais rajouter un code qui stocks tous mes num_arbre afin de pouvoir faire mes comparaisons. J'ai commencer un bout de code je le post mais je sents que je vais droit dans le mur ;)
function Volume_total() {
var nb_arbre = document.getElementById('nombre_arbre_prerempli').value;
var i = 0;
var total = 0;
var compt = 0;
var z = 0;
for (var z = 0; z < nb_arbre; z++) {
var "num_arbre"+z = document.getElementById('menu'+i+'0').value;
var "num_arbre_stocké"+z = "num_arbre"+z;
//ici je pensais faire une deuxième boucle pour mes comparaisons ...
}
while (i != nb_arbre) {
var arbre = document.getElementById('menu'+i+'3').value;
if (arbre!="") {
test= function () {
sucrer_espaces(arbre); }
total = total+parseFloat(arbre);
compt++;
}
i++;
}
total=(total.toFixed(3));
document.getElementById('volume_reel_prerempli').value=total;
alert ("Vous avez abattu "+compt+" arbre");
document.getElementById('arbre_abattu_prerempli').value=compt;
}

Merci

12 réponses

PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
24 déc. 2010 à 11:43
Bonjour,
je ne saisi pas trop le soucis il suffit de regarder si l'arbre saisie fait déjà partie de la liste, qu'il faut donc mettre en place.

;O)
0
jagogordonne Messages postés 29 Date d'inscription mardi 9 décembre 2008 Statut Membre Dernière intervention 7 janvier 2011
24 déc. 2010 à 11:49
Bonjour PetolTeam, et merci oui je cherche à lister tout mes arbres (saisie par l'utilisateur) et ensuite les comparer pour savoir si j'ai des doublons ... Et si c'est le cas mettre une petite alerte avec le numéro d'arbre.
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
24 déc. 2010 à 13:05
un petit exemple, à adapter bien sur
<html>
<head>
<title>[PetoleTeam]Verif doublon</title>
<style type= "text/css">
</style>
<script type="text/javascript">
var Liste = [];
//---------------
function fctAdd(){
  //-- Initialisation
  var oText = document.getElementById( 'I_SAISIE');
  var szTmp = oText.value;
  var nb = Liste.length;
  //-- parcours tous les elements de Liste
  for( var i =0 ; i < nb; i++){
    //-- existe deja ?
    if( szTmp == Liste[i]){
      //-- OUI on previens
      alert('ERREUR\n[' + szTmp + '] est déjà dans la liste');
      //-- on quite la fonction
      return( false);
    }
  }
  //-- on ajoute
  Liste[nb] = szTmp;
  //-- vide le champ
  oText.value = "";
  //-- remets le focus
  oText.focus();
}
</script>
</head>


 Add 

Voir a liste

</html>

au passage
var "num_arbre"+z  = document.getElementById('menu'+i+'0').value;
var "num_arbre_stocké"+z = "num_arbre"+z;
la syntaxe est illégale


;O)
0
jagogordonne Messages postés 29 Date d'inscription mardi 9 décembre 2008 Statut Membre Dernière intervention 7 janvier 2011
31 déc. 2010 à 15:02
Bonjour PetolTeam, désolé du retard mais avec toutes ces fêtes j'ai pas eu trop le temps. Je suis sur le problème actuellement mais je ne vois pas comment créer ma liste ... car comme tu as pu le voir dans mon précédent post mes saisies je les exploites de cette façon :
num_arbre=document.getElementById('menu'+i+'1').value;

le "1" correspond à la colonne de mon tableau et "i" c'est la ligne ;) et il y a autant de i qu'il y a d'arbre, je possède ce chiffre grace a cette variable
var nb_arbre = document.getElementById('nombre_arbre_prerempli').value;

Ensuite au sujet de ta fonction super et merci encore mais quelques trucs m'échappent par exemple pourquoi le "var Liste = [];" n'est pas dans la fonction ? Je pense que c'est justement pour ne pas faire un RAZ de la liste ... Je te montre ou j'en suis mais comme je t'ai dit je ne comprend pas comment construire la liste malgré les commentaires ...
var Liste = [];
//---------------
function fctAdd(){
  //-- Initialisation
  //var oText = document.getElementById( 'I_SAISIE');
  
  var nb = document.getElementById('nombre_arbre_prerempli').value;
  
  //-- parcours tous les elements de Liste
  for( var i =0 ; i < nb; i++){
var oText document.getElementById('menu'+i+'1').value;
var szTmp = oText.value;
//-- existe deja ?
if( szTmp == Liste[i]){
  //-- OUI on previens
  alert('ERREUR\n[' + szTmp + '] est déjà dans la liste');
  //-- on quite la fonction
  return( false);
}
}
  //-- on ajoute
  Liste[nb] = szTmp;
  //-- vide le champ
  oText.value = "";
  //-- remets le focus
  oText.focus();
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
31 déc. 2010 à 19:50
Bonjour,
on voit cela l'année prochaine si cela ne déranges pas, bubulles obligent
Bon réveillon °O°!
|O°)
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
3 janv. 2011 à 19:15
Bonjour,
il y a effectivement 2 manières, au moins de tester l'existant.
1/ à chaque saisie on parcours les lignes ajoutées et l'on vérifie l'existant
2/ à chaque saisie on parcours une liste mise à jour au fil de l'eau et l'on vérifie l'existant

c'est cette 2ème méthodes que je t'ai mis, elle présente l'avantage d'être plus simple et plus légère à mettre en oeuvre et plus rapide que le parcours de la TABLE créer.

Il faut effectivement que la liste soit déclarée en variable globale pour ne pas être perdue entre chaque accès à la fonction.

Le principe de construction est le suivant
- au début la liste est vide
- à la 1st saisie on ajoute la saisie dans la liste, la vérification se fait mais la saisie n'existera forcément pas
- aux saisies suivantes si la valeur est déjà dans la liste on ne fait rien, sinon on crée la nouvelle ligne dans la table

Dans l'exemple que je t'ai mis cela pourrait se traduire par
var Liste = [];
//---------------
function fctAdd(){
  //-- Initialisation
  var oText = document.getElementById( 'I_SAISIE');
  var szTmp = oText.value;
  var nb = Liste.length;
  //-- parcours tous les elements de Liste
  for( var i =0 ; i < nb; i++){
    //-- existe deja ?
    if( szTmp == Liste[i]){
      //-- OUI on previens
      alert('ERREUR\n[' + szTmp + '] est déjà dans la liste');
      //-- vide le champ
      oText.value = "";
      //-- remets le focus
      oText.focus();
      //-- on quitte la fonction
      return( false);
    }
  }
  //-- on ajoute
  Liste[nb] = szTmp;
  //-------------------------------------------------//
  //-- CREATION d'une nouvelle ligne dans la TABLE --//
  //-------------------------------------------------//
}
tu peux également te servir d'un return( true); pour continuer dans la fonction appelante.

Espérant avoir été un peu plus clair.
;O)
0
jagogordonne Messages postés 29 Date d'inscription mardi 9 décembre 2008 Statut Membre Dernière intervention 7 janvier 2011
6 janv. 2011 à 09:28
Bonjour,
Je suis de retour ;) voilà le code =>
var Liste = [];
//---------------
function fctAdd(){
  //-- Initialisation
  //var oText = document.getElementById( 'I_SAISIE');
  
  var nb = document.getElementById('nombre_arbre_prerempli').value;
  
  //-- parcours tous les elements de Liste
  for ( var i =0 ; i < nb; i++){
var oText = document.getElementById('menu'+i+'1').value;
alert (oText);
var szTmp = oText.value;
alert (szTmp);
//-- existe deja ?
if( szTmp == Liste[i]){
  //-- OUI on previens
  alert('ERREUR\n['+szTmp+'] est déjà dans la liste');
  //-- on quite la fonction
  return(false);
}
}
  //-- on ajoute
  Liste[nb] = szTmp;
  //-- vide le champ
  oText.value = "";
  //-- remets le focus
  oText.focus();
}


Quelque chose me perturbe lorsque je fais un alert de "oText" je récupère bien mon numéro d'arbre par compte après cette ligne =>

var szTmp = oText.value;


Si je fais une alerte de "szTmp" il me et "undefined" ... Je continue mes tests.
0
jagogordonne Messages postés 29 Date d'inscription mardi 9 décembre 2008 Statut Membre Dernière intervention 7 janvier 2011
6 janv. 2011 à 09:42
Et je voudrais apporter quelques précisions :

var oText = document.getElementById('menu'+i+'1').value;

Dans cette variable je récupère les numéros d'arbre un à un.

Et est ce normal d'avoir 2 noms différents pour la liste ?

if( szTmp == Liste[i])

Liste[nb] = szTmp;


merci.
0
jagogordonne Messages postés 29 Date d'inscription mardi 9 décembre 2008 Statut Membre Dernière intervention 7 janvier 2011
6 janv. 2011 à 11:38
re,
Vu que je n'y arrive je suis partie sur une autre fonction ... Cependant je ne sais pas comment exploiter les données d'un tableau javascript. Voici mon code =>
function fctAdd(){
var nb = document.getElementById('nombre_arbre_prerempli').value;
for( var i =0 ; i < nb; i++){
var oText = document.getElementById('menu'+i+'1').value;
var MonTableau = new Array();
//ici il faut que je controle si l'enregistrement n'éxiste pas déjà
//mais je ne vois pas comment parcourir le tableau
//J'ai vu qu'il existe la Propriété input sur l'objet Array
//mais je ne sais pas comment l'utilisé ...
if (oText == MonTableau) {
alert ('Le numéro '+oText+' est un doublon');
return( false);
}
MonTableau[i] = oText;
alert (MonTableau[i]); //ici je recupère bien les valeurs saisies
}
alert ("il n'existe pas de doublon");
}
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
6 janv. 2011 à 18:50
Bonjour,
une ereur d'utilisation du code
//-- Recup l'objet, sans value donc
var oText = document.getElementById('menu'+i+'1'); // Modif ICI
alert (oText);                                     // doit donner [object]
//-- Recup la value
var szTmp = oText.value;

voila pour reprendre en douceur.

;O)
0
jagogordonne Messages postés 29 Date d'inscription mardi 9 décembre 2008 Statut Membre Dernière intervention 7 janvier 2011
7 janv. 2011 à 17:11
Bonjour,
ok mais je vois pas vraiment la différence ... Désolé si je te parait nul mais à la base je suis admin réseaux ;)
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
7 janv. 2011 à 17:26
tu avais écris
//-- parcours tous les elements de Liste
for( var i =0 ; i < nb; i++){
  var oText document.getElementById('menu'+i+'1').value;
  var szTmp = oText.value;
  //-- existe deja ?
donc
- oText = la value de ton INPUT

et
- szTmp = la value de la value de ton INPUT, ce qui est incorrect!

Voila le pourquoi de la correction.

tu as également écris
for( var i =0 ; i < nb; i++){
  var oText = document.getElementById('menu'+i+'1').value;
  var MonTableau = new Array();
  //ici il faut que je controle si l'enregistrement n'éxiste pas déjà
  //mais je ne vois pas comment parcourir le tableau
  //J'ai vu qu'il existe la Propriété input sur l'objet Array
  //mais je ne sais pas comment l'utilisé ...
  if (oText == MonTableau) {
    alert ('Le numéro '+oText+' est un doublon');
    return( false);
  }
  MonTableau[i] = oText;
  alert (MonTableau[i]); //ici je recupère bien les valeurs saisies
donc
- var MonTableau = new Array();, est une variable locale et donc remise à zéro a chaque passage dans ta fonction

et
- oText == MonTableau, est incorrecte tu compares un texte avec un objet Array et non à son contenu

et enfin
- MonTableau[i] = oText, tu affectes bien à une case du tableau la valeur de oText, ce qui est correcte

;O)
0
Rejoignez-nous