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 :

[DOM] Soucis de manipulation du DOM sous IE


Sujet :

JavaScript

  1. #1
    Membre régulier Avatar de foolib
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 111
    Points : 90
    Points
    90
    Par défaut [DOM] Soucis de manipulation du DOM sous IE
    Bonjour/bonsoir ...
    Mon problème est le suivant, j'ai créé une fonction qui parcour un formulaire donné et me retourne une chaine composée des noms des champs INPUT suivis de leur valeur... (style passage d'argument en méthode post) : champ1=valeur1&champ2=valeur2

    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
     function setPostParams(form_Name){
    	 var str='';var flag=false;
    	 for(var i=0 in document.forms[form_Name].elements){
    		 if(document.forms[form_Name].elements[i].nodeName=='INPUT' ){
    				if(flag==true){
    					str+="&"+document.forms[form_Name].elements[i].name+"="+document.forms[form_Name].elements[i].value;
    				}
    				else
    				{
    					str+=""+document.forms[form_Name].elements[i].name+"="+document.forms[form_Name].elements[i].value;
    					flag=true;
    				}
    			}
    	 }
    	 alert(str);
     }
    Celà fonctionne très bien dans FireFox mais pas dans IE qui lui semble ne pas comprendre l'attribut 'nodeName'

    Je m'arrache les cheveux alors celui qui a une solution m'épargnerai la perruque !
    Merci d'avance !

    PS : J'ai bien vu des choses sur google mais bien trop lourdes pour ce que je veux en faire.

  2. #2
    Membre expérimenté
    Avatar de Jumano
    Profil pro
    Inscrit en
    Février 2007
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 1 163
    Points : 1 595
    Points
    1 595
    Par défaut
    Bonsoir,
    As tu essayé de remplacer "nodeName" par "tagName".

  3. #3
    Membre régulier Avatar de foolib
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 111
    Points : 90
    Points
    90
    Par défaut
    Merci pour l'interet,

    Si je remplace nodeName par tagName tel que dans le code,
    je vérifie alors avec un alert ce qu'il comprend
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alert (document.forms[form_Name].elements[i].tagName);
    IE retourne undefined.

  4. #4
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    bonjour,

    et comme ceci :
    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
     
    function setPostParams(form_id)
    {
      var str="", i, n;
      var flag = false;
      var tabEl = document.getElementById(form_id).getElementsByTagName("*");
     
      n = tabEl.length;
     
      for (i=0; i<n; i++)
      {
        if (tabEl[i].tagName.toLowerCase()=="input")
        {
          if (flag)
          {
            str += "&" + tabEl[i].name+"="+tabEl[i].value;
          }
          else
          {
            str += ""+ tabEl[i].name+"="+tabEl[i].value;
            flag = true;
          }
        }
     
      }
     
      alert(str);
    }



    ou mieux encore :
    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
     
    function setPostParams(form_id)
    {
      var str="", i, n;
      var tabEl = document.getElementById(form_id).getElementsByTagName("input");
     
      n = tabEl.length;
     
      for (i=0; i<n; i++)
      {
          if (i>0)
          {
            str += "&" + tabEl[i].name+"="+tabEl[i].value;
          }
          else
          {
            str += ""+ tabEl[i].name+"="+tabEl[i].value;
          }    
      }
     
      alert(str);
    }
    attention : le paramètre de la fonction n'est plus le name du formulaire mais son id (il faudra donc le définir si tu ne l'as pas fait). Par exemple :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <form id="idFormulaire" name="nameFormulaire">
     
    <!-- ton formulaire -->
    </form>
    appel de la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setPostParams("idFormulaire")

  5. #5
    Membre régulier Avatar de foolib
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 111
    Points : 90
    Points
    90
    Par défaut
    Merci pour cette réponse rapide!
    Effectivement ça fonctionne
    j'avais pensé à passer par getElementById ... Mais toujours fidèle à moi même, je n'aime pas rester sur une impasse et j'aurai aimé savoir comment faire en utilisant les fonctions de parcourt du DOM sous ie.
    Donc si quelqu'un sait je le prie de bien vouloir allumer ma lanterne, merci d'avance

  6. #6
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    getElementById() et getElementsByTagName() ce n'est pas du DOM

    En plus c'est plus efficace que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.forms[form_Name].elements[i]

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Auteur Voir le message
    ou mieux encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    ...  
      for (i=0; i<n; i++)
      {
          if (i>0)
          {
            str += "&" + tabEl[i].name+"="+tabEl[i].value;
          }
          else
          {
            str += ""+ tabEl[i].name+"="+tabEl[i].value;
          }    
      }
    ...
    Ou:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      for (i=0; i<n; i++) {
          if (i>0) str += "&";
          str += tabEl[i].name + "=" + tabEl[i].value;
      }
    A+

  8. #8
    Membre régulier Avatar de foolib
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 111
    Points : 90
    Points
    90
    Par défaut La vérité est ailleurs ...
    J'ai fait plusieurs tests et je me suis aperçu qu'en fait IE parcourt differement les tableaux d'objets HTMLElements dans la boucle for( ... in ...) par rapport à Firefox.
    Et il s'avère que le code suivant fonctionne !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function setPostParams(form_Name){
    	 var str=''; var n=document.forms[form_Name].elements.length;
    	 for(var i=0 ;i<n;i++){
    		 if(document.forms[form_Name].elements[i].nodeName=='INPUT'){
    				if(i>0) {str+="&";}
    				str+=""+document.forms[form_Name].elements[i].name+"="+document.forms[form_Name].elements[i].value;
    		}
    	 }
    	 return str;
     }
    L'attribut nodeName est donc bien connu sous ie (ie7 pour l'exemple)
    Conclusion : Attention à la boucle for(...in...)
    Merci à tous !

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

Discussions similaires

  1. Manipulation du DOM sous IE
    Par natoine dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 23/08/2010, 16h52
  2. [DOM] avoir le contenu d'un sous noeud en fonction de l'attribut
    Par starr dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 20/07/2007, 17h24
  3. [DOM] removeChild supprime t'il les "sous Child" ?
    Par dymezac dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 08/12/2006, 12h04
  4. [DOM] Problème de manipulation DOM avec IE7
    Par volivi dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 25/04/2006, 10h49
  5. [DOM] Utilisation de l'API DOM pour créer du HTML sous IE
    Par pedouille dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/01/2006, 14h48

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