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 :

Modifier l'événement onClick même avec FAQ


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 223
    Par défaut Modifier l'événement onClick même avec FAQ
    Bonjour tout le monde,

    Voilà un bon petit moment que je cherche un moyen compatible de modifier l'événement onClick d'un input en javascript

    J'ai suivi l'exemple de la FAQ, mais cela ne marche pas dans mon cas, alors j'appelle au secours

    Dans un 1er temps, je suis passé par un setAttribute('onClick', mafonction)
    Ceci fonctionne très bien sur firefox, mais génère une erreur sur IE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cet objet ne gère pas cette propriété ou cette méthode
    J'ai donc essayé d'acceder directement à l'objet onclick comme expliqué dans la FAQ.
    Cela ne marchait pas, alors j'ai directement copier l'exemple de la FAQ dans mon code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    aInputs[j].onclick=function(){alert(blabla)};
    Voici mon code, en fait, je cherche tous les inputs text compris dans une ligne de tableau, et je souhaite modifier leur événement onClick

    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
    29
    30
    31
    32
    33
    34
     
        aTds=aTable[0].getElementsByTagName('td');
        for (var i=0; i<aTds.length;i++)
        {
            var strNewIdOnGoing=""
            var aInputs=aTds[i].getElementsByTagName('input');
            if(aInputs.length>0)
            {
                for(var j=0; j<aInputs.length;j++)
                {
                    if(aInputs[j].type=='text')
                    {		
                        if(intRowCounter==0)
                            strInputIdCreatedByDefault=aInputs[j].getAttribute('id');
                        //alert(strIdOnGoing);
                        strNewIdOnGoing=strInputIdCreatedByDefault + '_' +  intRowCounter
                        aInputs[j].setAttribute('id', strNewIdOnGoing)
                    }
     
                    if(aInputs[j].type=='button')
                    {
                        strOnClick = aInputs[j].getAttribute('onClick');
                        //alert(strInputIdCreatedByDefault + ' ||||| ' + strNewIdOnGoing);
                        //Sous mozilla, ça fonctionne bien avec setAttribute
                        // si on fait .onclick, le onclick du dom est modifié, mais quand on affiche le source on voit qu'il n'y est pas
                        // Sous IE , setAttribute et onclick génèrent une erreur
                        strOnClick = strOnClick.replace(strInputIdCreatedByDefault,strNewIdOnGoing);
                        //aInputs[j].setAttribute('onclick', strOnClick);
    					//La ligne ci dessous ne fait rien sous firefox, et génère une erreur sous IE
                        aInputs[j].onclick=function(){alert(blabla)};
                    }    
                }
            }
        }

    Auriez-vous une idée ?

    Merci bien !

    @+.

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    bonjour,

    les méthodes setAttribute et getAttribute ne sont pas gérées par IE.

    pour donner une valeur à un attribut :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    aInputs[j].setAttribute('id', strNewIdOnGoing)
    devient :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    aInputs[j].id = strNewIdOnGoing

    pour lire un attribut :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strNewIdOnGoing = aInputs[j].getAttribute('id')
    devient :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strNewIdOnGoing = aInputs[j].id;

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 223
    Par défaut
    merci pour ta réponse !

    Apparement, pour l'id, je peux faire un setAttribute ou getAttribute ca semble fonctionner.
    Mais je ne les utilise plus car j'ai vu qu'il y avait des problèmes

    Mon cas sous IE, en passant directement par les objets :

    si je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    aInputs[j].id = strNewIdOnGoing
    Cela fonctionne

    mais si je veux modifier un événement, ici le onClick, et que je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    aInputs[j].onclick=function(){alert(blabla)};
    J'ai l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Cet objet ne gère pas cette propriété ou cette méthode

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    en reprenant cet exemple :
    http://javascript.developpez.com/faq...lick.dynamique
    je n'ai pas de souci, ni avec IE ni avec FF.

    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
    40
    41
    42
    43
    44
    45
     
    <html>
    <head>
    <title></title>
     
    <script type="text/javascript">
    <!--
    function clicBouton()
    {
     var tabInput = document.getElementsByTagName("input");
     var i, n;
     
     n = tabInput.length;
     for (i=0; i<n; i++)
     {
        if (tabInput[i].type.toLowerCase()=="button")
        {
           tabInput[i].i = i;
           tabInput[i].onclick = function(){alert("coucou "+this.i);}
        }
     }
    }
     
    //-->
    </script>
     
    </head>
     
    <body onload="clicBouton()">
    <input type="text" value="texte"  size="20" maxlength="10" />
    <input type="text" value="texte"  size="20" maxlength="10" />
    <input type="text" value="texte"  size="20" maxlength="10" />
     
     
    <input type="button" value="Bouton" />
    <input type="button" value="Bouton" />
    <input type="button" value="Bouton" />
    <input type="button" value="Bouton" />
    <input type="button" value="Bouton" />
     
     
     
    </body>
     
    </html>


    [edit]
    Code javscript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    aInputs[j].onclick=function(){alert(blabla)};
    tu as oublié de mettre blabla entre guillemets
    Code javscript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    aInputs[j].onclick=function(){alert("blabla")};
    [/edit]

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 223
    Par défaut
    oh

    bon effectivement j'avais oublié les guillemets

    donc maintenant

    ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    aInputs[j].onclick=function(){alert("blabla")};
    fonctionne sous firefox

    Sous IE j'ai toujours le même problème ...

    je comprends pas là

  6. #6
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 223
    Par défaut
    effectivement, le code que tu me donnes dans ton post plus haut fonctionne très bien sous IE

    mais pas le mien ... qu'est-ce qui diffère ?

    Dans ton code, les input n'ont pas d'attributs onclick lorsque que tu les set, donc en fait tu les créer.

    Dans mon cas, les attributs onclick existent déjà, mais je souhaite les modifier

    cela fait peut-être toute la différence ...

Discussions similaires

  1. Problème avec événement OnClick de DbGrid
    Par melles dans le forum Composants VCL
    Réponses: 6
    Dernier message: 22/10/2008, 17h26
  2. Évènement onclick qui ne fonctionne pas avec FireFox
    Par kilian67 dans le forum Général JavaScript
    Réponses: 16
    Dernier message: 19/09/2008, 11h34
  3. Sélection d'une plage (je n'y arrive pas même avec la FAQ :'( )
    Par Zak Blayde dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 11/01/2008, 14h26
  4. Réponses: 2
    Dernier message: 30/11/2006, 18h06
  5. Erreur avec l'évènement OnClick de ListView
    Par xenos dans le forum Composants VCL
    Réponses: 2
    Dernier message: 21/03/2006, 14h54

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