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 :

Mettre une méthode dans un onclick => possible ?


Sujet :

JavaScript

  1. #1
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 204
    Points : 123
    Points
    123
    Par défaut Mettre une méthode dans un onclick => possible ?
    Bonjour,

    je voudrais mettre une méthode d'objet dans une méthode, mais mon code ne marche pas.

    Voici le code, très simple :
    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
    //Le constructeur :
    function Foo()
    {	
    	/*On crée un élément div qu'on ajoute dans le document : */
    	div_element = document.createElement("div");
    	document.body.insertBefore(div_element, null);
     
    	/*On crée une méthode pour cacher l'élément div :*/
    	this.hide = function()
    	{
    		div_element.style.display = "none";
    	}
     
    	/*On ajoute un bouton dans l'élément div. Ce bouton contient la méthode this.hide() dans un onclick :*/
    	div_element.innerHTML = '<input type="button" value="Hide" onclick="this.hide();">';
    }
     
    foo = new Foo();
    C'est le onclick="this.hide();" dans le code qui ne marche pas.

    Avez-vous une idée ? Merci d'avance, cordialement.

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    lors de l'initialisation de Foo le this vaut Foo alors que dans onclick="this.hide() le this est l'élément cliqué.

    Il te faut donc à minima écrire
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="button" value="Hide" onclick="foo.hide();">

  3. #3
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Pour entrer dans les détails un peu techniques, la chaîne "this.hide;()" n'est pas évaluée au moment où le constructeur Foo (et tout son contenu) est evalué. Au lieu de ça, elle est évaluée au moment où l'utilisateur clique sur l'input, et à ce moment-là l'assocation this <=> {instance de Foo} n'existe plus.


    Attention : d'après la doc MDN de insertBefore, insertBefore(..., null) ne marche que sous Firefox. Préfère appendChild qui fait exactement la même chose.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  4. #4
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 204
    Points : 123
    Points
    123
    Par défaut
    Bonjour,

    merci à tous vos réponses et merci pour le "null" dans insertBefore qui ne marche que sur Firefox.

  5. #5
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Citation Envoyé par Watilin
    Attention : d'après la doc MDN de insertBefore, insertBefore(..., null) ne marche que sous Firefox. Préfère appendChild qui fait exactement la même chose.
    • La méthode insertBefore( noeud, null) fonctionne bien de partout !

    • Par contre je suis bien d'accord avec toi pour le fait que si le 2éme paramètre n'est pas dynamique autant utiliser appendChild.

  6. #6
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Citation Envoyé par NoSmoking Voir le message
    • La méthode insertBefore( noeud, null) fonctionne bien de partout !
    Oh là oui. J'ai lu la version anglaise de la doc (qui n'est pas à jour) et j'ai lié la version française. Et j'ai pas vérifié ce que je disais.
    J'ai fait n'importe quoi Mea culpa !
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

Discussions similaires

  1. Réponses: 6
    Dernier message: 26/10/2012, 09h13
  2. Réponses: 8
    Dernier message: 19/10/2009, 11h00
  3. Réponses: 4
    Dernier message: 08/06/2007, 23h26
  4. [Drag & Drop] Mettre une fiche dans un panel
    Par corwin_d_ambre dans le forum Composants VCL
    Réponses: 5
    Dernier message: 12/01/2004, 10h46
  5. Peut on mettre une image dans une BD MySQL ?
    Par maddog2032 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 25/07/2003, 16h18

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