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 :

[POO] [IE] Récupérer nom d'un "Function"


Sujet :

JavaScript

  1. #1
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut [POO] [IE] Récupérer nom d'un "Function"
    Bonjour à tous,

    je suis en train de travailler sur un code relativement simple (validation d'un formulaire), et j'ai un problème avec IE.

    Je récupère les eléments du formuaire avec getElementsByTagName. Ensuite, je regarde s'il s'agit d'un champ texte, et si la propriété "onblur" est définie (avec getAttribute). Si défini, j'exécute ce code avec eval.

    Traduit en code, cela donne un truc du genre:

    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
         var form = document.getElementById(formid);
        if(!form) return;
     
        inputs = form.getElementsByTagName('input');
     
        if(inputs.length<=0) return;
     
        for(var i=0; i<inputs.length; i++) {
            var input = inputs.item(i);
     
            if(input.id && input.getAttribute('type') == 'text' && input.getAttribute('onblur')!=undefined) {
                var s = input.getAttribute('onblur');
                var pos = s.indexOf('(');
     
                if(pos>0) {
                  var methodtocall = s.substring(0, pos);
                  methodtocall += ' (\''+input.id+'\')';
                  eval(methodtocall);
                }
            }
        }
    Ce qui fonctionne très bien sous firefox, mais plante sous IE (getAttribute me renvoie un objet de type "Function")...

    Comment récupérer le nom de la fonction sous forme de String?


    Merci d'avance
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

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

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

    IE ne connait pas getAttribute et setAttribute.
    Essaye comme ceci :
    Code html : 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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    <html>
    <head>
    <title></title>
    <script type="text/javascript">
    <!--
    // Fonction appelées par l'evenement onblur des 2 input
    function test1()
    {
     alert("coucou");
    }
     
    function test2()
    {
     alert("hello");
    }
     
     
    function exeFct()
    {
     var elmt = document.getElementsByTagName("input");  // on recupere les input
     
     var f = elmt[0].onblur;   // on place dans f le contenu de onblur
     alert(f);                      // affichage du contenu de f
     f();                            //exécution de f (affiche "coucou")
    }
     
    //-->
    </script>
    </head>
     
    <body onload="exeFct()">
     
    <input type="text" id="idInput1" onblur="test1()" />
    <input type="text" id="idInput2" onblur="test2()" />
     
    </body>
     
    </html>

    fonctionne avec IE et FF

  3. #3
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par Auteur Voir le message
    IE ne connait pas getAttribute et setAttribute.
    A la base, je suis assez d'accord avec Auteur. IE n'aime pas beaucoup getAttribute.

    Citation Envoyé par Pill_S Voir le message
    Ce qui fonctionne très bien sous firefox, mais plante sous IE (getAttribute me renvoie un objet de type "Function")...
    Maintenant, si IE te renvoie un objet de type Function, on peut dire que tu as du pot

    Dans ce cas, pour l'utiliser, plutot que de chercher à le transformer en string, fait directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var s = input.getAttribute('onblur');
    if(typeof s == "Function") {
      s(input.id);
    }
    Une Function, c'est fait pour s'en servir

  4. #4
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    336
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 336
    Points : 374
    Points
    374
    Par défaut
    C'est "function", et non pas "Function", qui lui est le constructor.

  5. #5
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Citation Envoyé par denisC Voir le message
    Maintenant, si IE te renvoie un objet de type Function, on peut dire que tu as du pot
    Oui, je suis du genre chanceux

    Une Function, c'est fait pour s'en servir
    C'est vrai en plus, c'est bête comme choux, mais je n'ai pas vraiment les réflexes javascript....

    En tout cas voilà une affaire rondement menée Je tag résolu
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

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

Discussions similaires

  1. [POO] Récupérer nom d'un bouton
    Par umeboshi dans le forum Langage
    Réponses: 5
    Dernier message: 23/10/2007, 17h18

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