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 :

onClick


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Par défaut onClick
    Bonjour à tous,

    J'ai un probleme avec le DOM et surtout avec la propriété onclick.
    Dans un javascript, je créée dynamiquement un tableau (avec le DOM). Dans chaque cellule, j'ai un chiffre que je rends cliquable comme ceci :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    jour = document.createTextNode(numJour);
    elementJour = document.createElement(\"span\");
    elementJour.setAttribute("onClick", "choisiJour("+numJour+","+moisChoisi+","+anneeChoisie+")");

    choisiJour est une fonction à laquelle je donne trois paramètres. Evidemment la dernière ligne ne fonctionne pas sous IE mais marche très bien avec Firefox.

    Sous IE6, je dois mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    elementJour.onclick = choisiJour;
    Probleme je ne peux pas lui passer de paramètres car si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    elementJour.onclick = choisiJour(numJour, moisChoisi, anneeChoisie);
    l'évènement n'est même pas géré, et retourne directement (sans le clic) la valeur calculée par choisiJour.

    Il s'agit d'un calendrier, ou chaque jour doit être cliquable. Probleme, je ne peux pas cliquer sur les jours, il me retourne direct une valeur sauf si je met elementJour.onclick = choisiJour; mais je dois lui passer des paramètres...

    Avez-vous une solution afin que je puisse passer mes paramètres à la fonction choisiJour ???

    Merci d'avance
    Guy777

  2. #2
    Membre Expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Par défaut
    Regarde ca, a tout hasard :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    elementJour.onclick = function{choisiJour(numJour, moisChoisi, anneeChoisie);}
    Fremy

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Par défaut
    Non, çà marche pas, mais j'ai trouvé quelque chose qui marche pour mon cas, je doute que cela marche pour d'autres cas.

    Plutot que de faire onclick=fonction

    je fais onclick = function() { //definition fonction }

    Et là je n'ai plus besoin de passer des paramètres, j'utilise les variables numJour, moisChoisi et anneeChoisie qui sont disponibles.

    Force est de reconnaitre que les bugs d'IE ou son manque de logique dans l'interprétation du Javascript ne simplifie pas la tâche du développeur. Firefox est tout de même beaucoup plus intéressant...

    Merci,
    Guy777

  4. #4
    Expert confirmé

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

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

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Par défaut
    Citation Envoyé par guy777
    Non, çà marche pas, mais j'ai trouvé quelque chose qui marche pour mon cas, je doute que cela marche pour d'autres cas.
    Si, si, ça marche dans tous les cas, et c'est même comme ça qu'il faut faire. Une fois n'est pas coutume, je vais prendre la défense d'IE.

    C'est la bonne et la seule façon de faire, qui marche tout le temps, et qui est la plus logique....

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Par défaut
    Mouais ... Il est vrai que la syntaxe demandée par IE s'inspire fortement de celle de Java, où l'on doit redéfinir la classe concernée par l'évènement.

    M'enfin si on peut pas faire appel à une fonction externe en lui passant des paramètres, je trouve que çà limite la puissance de la chose, et c'est bien dommage. Néanmoins je ne comprends pas bien la logique : un onclick = function () {}. Pourquoi définir une fonction comme ceci ???

    Guy777

  6. #6
    Expert confirmé

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

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

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Par défaut
    Citation Envoyé par guy777
    Néanmoins je ne comprends pas bien la logique : un onclick = function () {}. Pourquoi définir une fonction comme ceci ???
    Euh, c'est une question de pycho?!? genre dieux, ma place dans le monde et tout ça? Parceque sinon, du point de vue Javascript, on fait comme ça parceque la syntaxe nous dit de faire comme ça....

  7. #7
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Par défaut
    en fait le onclick est un pointeur de fonction, soit tu lui affecte directement, soit tu lui passe une référence vers une fonction existante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function doSomething(){
        alert('hello world');
    }
    elementjour.onclick=doSomething;
    tu remarqueras l'absence de ().

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Par défaut
    Citation Envoyé par denisC
    Euh, c'est une question de pycho?!? genre dieux, ma place dans le monde et tout ça? Parceque sinon, du point de vue Javascript, on fait comme ça parceque la syntaxe nous dit de faire comme ça....
    Euh non j'suis pas un psycho , mais j'aime comprendre ce que je fais, cela évite bien des erreurs plutôt que d'appliquer bêtement des bouts de code sans vraiment comprendre comment ils fonctionnent.

    Ce qui m'interroge surtout, c'est de comprendre comment les concepteurs ont pensé çà, quels en sont les avantages et inconvénients et aussi les alternatives. Remarquez, il n'y a qu'eux pour le dire.

    en fait le onclick est un pointeur de fonction
    Ca c'est une réponse qui m'interesse, merci siddh.

    soit tu lui affecte directement, soit tu lui passe une référence vers une fonction existante :
    Ok ! Mais alors pourquoi en passant par une fonction existante, le passage de paramètres fonctionnent mais il pose des problemes :

    Un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ...
    monObjet.onclick = maFonction(val1, val2, val3);
    ...
    function maFonction(arg1, arg2, arg3) {
       // définition de la fonction
       // par exemple, écrire Hello à un certain endroit
    }
    Dans cet exemple, le onclick n'est pas "correctement" interprété, la fonction s'éxecute sans attendre le click sur l'objet. Maintenant que siddh me dit que onclick est un pointeur de fonction, le "probleme" parait logique mais c'est tout de même chiant, au premier abord on ne peut pas se douter que çà ne va pas marcher !

    Voilà voilà,
    Merci quand même à tous ceux qui m'ont répondu

    Guy777

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2006
    Messages : 32
    Par défaut Dis-moi si je me trompe mais...
    je crois avoir trouvé ton anguille sous roche; n'est-ce pas la difference entre IE et firefox semblable à JS et JavaScript? Je m'explique..

    Tout dépendant sous lequel des navigateurs tu roules, il faudra que tu ajuste ta syntaxe; par exemple, il te faudra utiliser les balises [ ] afin qu'IE interprète tes trois valeurs comme tu veux bien l'entendre.

    Si ma mémoire ne me joue pas de vilains tours, je suis sur d'avoir lu un article sur les changements apportés à IE dans la nouvelle version (présentement en test) qui va régler ce problème ennuyant.

    Donnes-moi de tes nouvelles sur ce sujet histoire de voir si j'ai visé juste ou non.

    Ben

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

Discussions similaires

  1. [C#] Postback à la place de onclick avec Entrée
    Par Anomaly dans le forum ASP.NET
    Réponses: 7
    Dernier message: 24/09/2004, 14h35
  2. [TListView] OnClick ? Tri ?
    Par remixtech dans le forum Composants VCL
    Réponses: 2
    Dernier message: 07/04/2003, 21h33
  3. TMenuItem.OnClick et TNotifyEvent
    Par Jacques Deyrieux dans le forum Composants VCL
    Réponses: 4
    Dernier message: 31/03/2003, 11h24
  4. Modification de l'évènement OnClick
    Par MrJéjé dans le forum C++Builder
    Réponses: 9
    Dernier message: 22/08/2002, 12h52
  5. Un Sender peut-il s'auto-détruire lors d'un onClick?
    Par Flo. dans le forum C++Builder
    Réponses: 2
    Dernier message: 17/07/2002, 10h31

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