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 :

gérer un click


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 5
    Points : 5
    Points
    5
    Par défaut gérer un click
    Bonjour,
    Découvrant JavaScript, je bute sur la manière d'organiser mon code.

    J'ai un simple bouton dans un formulaire ayant un ID: id="bouton1"

    Si j'écris:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <script type="text/javascript">
    var bouton= document.getElementById('bouton1');
     
    	function voir(){
    	alert("toto");
    	}
     
    bouton.addEventListener("click", voir, false);
    </script>
    Tout fonctionne correctement, ma boite de dialogue apparait bien lorsque je clique sur mon bouton.

    Par contre, si je tente d'utiliser une fonction avec un argument:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <script type="text/javascript">
    	var bouton= document.getElementById('butht');
     
    function voir(arg){
    	alert(arg);
    	}
     
    bouton.addEventListener("click", voir("toto"), false);
    </script>
    Le bouton fonctionne toujours mais la fonction est également appelée à l'ouverture de la page...
    Quelqu'un saurait il me dire pourquoi ?
    Merci de votre aide
    Yvan

  2. #2
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Salut,

    Il faut placer l'appel à la fonction voir() dans une fonction dite "anonyme".

    D'autre part, il faut utiliser la méthode attachEvent pour assurer la compatibilité avec IE.
    La fonction addEventSimple est déstinée à prendre ce cas en compte.
    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
     
    function addEventSimple(obj,evt,fn){
    	if (obj.addEventListener)
    		obj.addEventListener(evt,fn,false);
    	else if (obj.attachEvent)
    		obj.attachEvent('on'+evt,fn);
    }
     
    function voir(arg){
    	alert(arg);
    }
     
    var bouton=document.getElementById('butht');
    addEventSimple(
    	bouton,
    	'click',
    	function(){
    		voir("toto");
    	}
    );

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Merci,

    Cela fonctionne parfaitement bien.
    J'ai cependant un peu de mal à tout comprendre.

    Imaginons que l'on ne souhaite pas tenir compte des spécificités d'IE (utilisation du site limitée à quelques utilisateurs sans IE dans mon cas), est il alors possible d'écrire ces quelques lignes plus simplement.

    Je me replonge dans les fonctions anonymes de suite et me documente sur addEventSimple...

    Merci beaucoup

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Documenté sur addEventListener et les fonctions anonymes, je commence à comprendre...

  5. #5
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Sous IE, avec le code ci-dessous...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    var bouton=document.getElementById('bouton');
    try{
    	bouton.addEventListener('click',function(){voir("toto");},false);
    }
    catch(e){
    	alert(e);
    }
    Nous obtenons le message d'alerte...
    TypeError : Ce objet ne gère pas cette propriété ou cette méthode
    D'où l'interêt d'avoir la fonction addEventSimple qui utilise la méthode attachEvent si la méthode addEventListener n'est pas gérée.

  6. #6
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    pourquoi se faire chier avec des "attachEvent" et des "eventListener" quand on peut simplement utiliser l'attribut "onclick" qui est compatible avec tous les navigateurs et plus simple à écrire ?
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('bouton1').onclick = function(){voir("toto");};

  7. #7
    Invité
    Invité(e)
    Par défaut
    pourquoi se faire chier avec des "attachEvent" et des "eventListener" quand on peut simplement utiliser l'attribut "onclick"
    pour pouvoir faire des "dettachEvent" et des "removeEventListener" et pouvoir conserver le reste des evenement et aussi eviter le parasitage d'autres code dans une page comme onload mais il est vrais qu'une gestion des evenement a la dom 1 est tres efficace dans beaucoup de cas et sans soucis de compatibilite

  8. #8
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Citation Envoyé par mekal
    pour pouvoir faire des "dettachEvent" et des "removeEventListener"...
    Et pour ces méthodes, nous faisons comme pour la fonction addEventSimple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function removeEventSimple(obj,evt,fn){
    	if (obj.removeEventListener)
    		obj.removeEventListener(evt,fn,false);
    	else if (obj.detachEvent)
    		obj.detachEvent('on'+evt,fn);
    }
    Et puisqu'on y est, pour window.onload...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function addLoadListener(func){
    	if(window.addEventListener)
    		window.addEventListener('load',func,false);
    	else if(document.addEventListener)
    		document.addEventListener('load',func,false);
    	else if(window.attachEvent)
    		window.attachEvent('onload',func);
    	else if(typeof window.onload!='function')
    		window.onload=func;
    	else{
    		var oldonload=window.onload;
    		window.onload=function(){oldonload();func();};
    	}
    }

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 26/08/2009, 21h55
  2. Gérer les clicks sur liste d'images TileListe
    Par Anified dans le forum Flex
    Réponses: 7
    Dernier message: 08/07/2008, 10h08
  3. Gérer le click de plusieurs boutons en une seule procédure
    Par OhMonBato dans le forum Windows Forms
    Réponses: 12
    Dernier message: 20/03/2008, 18h32
  4. Gérer un click souris long.
    Par anakronox dans le forum SDL
    Réponses: 17
    Dernier message: 05/12/2007, 14h11
  5. [JTree] gérer le click
    Par youp_db dans le forum Composants
    Réponses: 1
    Dernier message: 09/11/2006, 14h47

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