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

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  [RESOLU] chaine caractère en parametre de fonction / Javascript

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU] chaine caractère en parametre de fonction / Javascript

n°1559287
Mister_Pin​gouin76
Posté le 12-05-2007 à 02:40:41  profilanswer
 

Bonjour, ou plutôt bonsoir :)
 
Alors mon petit problème qui me prend la tête depuis quelques temps est le suivant :
Je souhaite créer une petite fonction JavaScript qui permette de vérifier un formulaire. Jusque là rien de très sorcier...
Mais le petit plus, c'est que je voudrais pouvoir réutiliser cette fonction pour n'importe quel formulaire (donc de nom différent) et, par exemple, juste pour le deuxième, s'il y'en a deux sur une page...
 
Je veux donc faire passer le nom du formulaire à checker en paramètres, mais le problème est que ça foire à chaque fois avec le message d'erreur suivant :

Code :
  1. Erreur : document.getElementsByName(nom).style has no properties


 
Pour exemple, la fonction "rouge" marche car je fournis le numéro du formulaire (calculé dans une autre fonction), ainsi que le numéro de l'élément dans ce formulaire.
Mais la fonction "white" ne marche pas et renvoie le message d'erreur ci-dessus, et ce pour n'importe quel passage de chaîne de caractères en paramètre de fonction...
Je suppose que le problème vient du fait que nom n'est pas entre guillemets dans le getElements, alors si quelqu'un a une idée pour résoudre ce problème de cette manière, je suis preneur... :)
 

Code :
  1. function rouge(num_form,i)
  2. {
  3. document.forms[num_form].elements[i].style.background = "#AD0000";
  4. }
  5. function white(nom)
  6. {
  7. document.getElementsByName(nom).style.background = "white";
  8. }
  9. document.write(rouge(0,2));
  10. document.write('prenom');


 
EDIT : de même si pour la fonction "rouge", je change par :

Code :
  1. function rouge(formulaire, elementformulaire)
  2. {
  3.          document.formulaire.elementformulaire.style.background = "#AD0000";
  4. }


j'obtiens la même erreur...


Message édité par Mister_Pingouin76 le 12-05-2007 à 14:46:29

---------------
Goldbarre [Gains:23€] | Eurobarre [Gains:18€]
mood
Publicité
Posté le 12-05-2007 à 02:40:41  profilanswer
 

n°1559289
gatsu35
Blablaté par Harko
Posté le 12-05-2007 à 02:58:01  profilanswer
 

un formulaire on y accede par un ID
<form id="tamere">

 

document.getElementById("tamere" )
un element  de formulaire c'est pareil.

 

getElementsByName ca n'existe pas ou plus du tout.

 


et même si tu voulais que ta fontion rouge marche, il faudrait faire :

 
Code :
  1. function rouge(formulaire, elementformulaire)
  2.     {
  3.             document[formulaire][elementformulaire].style.background = "#AD0000";
  4.     }


Message édité par gatsu35 le 12-05-2007 à 02:58:47
n°1559290
Shinuza
This is unexecpected
Posté le 12-05-2007 à 03:08:49  profilanswer
 

-La méthode getElementsByName c'est à chier et non portable.
-Sache que l'attribut name est deprecated, il est recommandé d'utiliser un id. Par exempe, name à disparu dans XHTML, donc du coup tu peux foutre ton js à la poubelle.
-Pour cibler un Id, getElementById s'impose, ce qui te permet de passer une string en paramètre de ta fonction.
-Utiliser le "tableau" forms c'est également à chier, si tu dois rajouter une form au milieu de ta page, tout le tableau est décalé.
-Pense "factorisation", à savoir une fonction indépendante de l'environnement et des propriétés de ta page.
-Même pour tester évite ce genre de nom de fonction.


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
n°1559344
Mister_Pin​gouin76
Posté le 12-05-2007 à 11:43:53  profilanswer
 

oki :)
merci je vais suivre vos conseils et tout revoir ce joyeux bordel :)


---------------
Goldbarre [Gains:23€] | Eurobarre [Gains:18€]
n°1559391
Mister_Pin​gouin76
Posté le 12-05-2007 à 13:55:59  profilanswer
 

Et si je veux faire une "vérification listée" de tous les éléments que contient mon formulaire ?
 
Du genre :  

Code :
  1. function check(formulaire) {
  2.     for(var i =0; i < document[formulaire].length; i++)
  3.     {
  4.   if (document[formulaire].getElementById(i).value=="" )
  5.   {
  6.         alert("Le champ "+document[formulaire].elements[i].name+" est vide" );
  7.  rouge(formulaire,elements[i].name);
  8.  document[formulaire].elements[i].focus();
  9.  return false;
  10.   }
  11.           else return true;
  12.      }
  13. }


 
PS : j'ai codé n'importe comment et plusieurs choses doivent être fausses, mais je n'ai aucune idée de comment y arriver avec getElementById :/
Si une bonne âme charitable pouvait m'aider :p
Merci d'avance :)


Message édité par Mister_Pingouin76 le 12-05-2007 à 13:56:40

---------------
Goldbarre [Gains:23€] | Eurobarre [Gains:18€]
n°1559393
masklinn
í dag viðrar vel til loftárása
Posté le 12-05-2007 à 14:10:03  profilanswer
 

Passer par un getElementsByTagName depuis ton formulaire.
 
Par exemple si tu as

Code :
  1. <form id="monform">
  2. <input type="text" name="nom" id="form_name"/>
  3. <input type="text" name="prenom" id="form_surname"/>
  4. <input type="text" name="chocolat" id="form_hpricot"/>
  5. </form>


Tu peux faire un truc du style

Code :
  1. function check(formId) {
  2.    var error = false;
  3.    var errors = [];
  4.    // récupération de l'élément de formulaire
  5.    var form = document.getElementById(formId);
  6.    // récupération de tous les "input" dans le formulaire
  7.    var inputs = form.getElementsByTagName('input');
  8.    // on itère sur les inputs
  9.    for(var i=0; i<inputs.length; ++i) {
  10.        var currentInput = inputs[i];
  11.        if(currentInput.value == "" ) {
  12.            setError(currentInput)
  13.            errors.push("Le champ " + currentInput.name + " est vide" );
  14.            // on ne focus() que le premier contrôle générant une erreur
  15.            if(!error) {
  16.                currentInput.focus();
  17.            }
  18.            error = true;
  19.        } else {
  20.            clearError(currentInput)
  21.        }
  22.    }
  23.    if(error) {
  24.        alert(errors.join("\n" ));
  25.    }
  26.    return !error;
  27. }
  28. function setError(control) {
  29.    control.style.borderColor = "red";
  30. }
  31. function clearError(control) {
  32.    control.style.borderColor = "";
  33. }


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1559404
Mister_Pin​gouin76
Posté le 12-05-2007 à 14:46:16  profilanswer
 

Merci beaucoup, je comprends beaucoup mieux maintenant :)
J'ai pu modifier mon code avec les getElementsByTagName et ca marche nickel :)
Encore merci


---------------
Goldbarre [Gains:23€] | Eurobarre [Gains:18€]

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

  [RESOLU] chaine caractère en parametre de fonction / Javascript

 

Sujets relatifs
[résolu] compilation séparéetaille pour les includes php [résolu]
la fonction move_uploaded_filejavascript
[Resolu] [VBA] Macro bibliographie sous wordWebservices et JNI [resolu]
Tester le nombre de lettre d'une chaine de caractéres[Resolu]executer script sur machine distante
[Résolu] Conflit entre deux fichiers js (plusieurs onLoad)[RESOLU] ASP.NET et AJAX 1.0, intellisense KO
Plus de sujets relatifs à : [RESOLU] chaine caractère en parametre de fonction / Javascript


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