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 :

Utilisation de la méthode AddEventListener()


Sujet :

JavaScript

  1. #1
    Membre éprouvé
    Avatar de Rony Rauzduel
    Homme Profil pro
    En formation Architecte logiciel
    Inscrit en
    Décembre 2008
    Messages
    638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : En formation Architecte logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 638
    Points : 1 128
    Points
    1 128
    Par défaut Utilisation de la méthode AddEventListener()
    Bonjour à toutes et à tous,

    Dans le code html suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <html>
     
        <head>
            <title>Prototype - Interface connexion des agents</title>
            <script src="scripts/verif.js" type="text/javascript"></script>
        </head>
        <body bgcolor="white">
          <form id="demoForm">
    		<input id="button" value="Button" type="button">
    	</form>
        </body>
    </html>
    si je place le code javascript suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    		if (document.body.addEventListener) {
    			document.getElementById("demoForm").addEventListener("click", function(){alert("button clicked");}, false);
    		}
    		else if (document.body.attachEvent)
    		{
      			alert("Your browser does not support addEventListener");
    		}
    Le script fonctionnne et la fenêtre s'affiche avec le message souhaité; par contre si je place le code dans le fichier verif.js
    pour respecter l'aspect unobstrusive de Javascript et dissocier le
    script et le balisage HTML cela ne fonctionne pas.

    En fait rien ne se passe comme si mon gestionnaire d'évènement
    n'était pas pris en compte.

    J'utilise Firefox 3.5.11 sous Linux.

    Merci d'avance.
    Transact.

  2. #2
    Expert éminent sénior

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Points : 79 912
    Points
    79 912
    Par défaut
    Bonjour,

    Quand vous dites que vous mettez le script dans la page, vous le mettez à quel endroit ? Après le HTML ou avant ? Car dans votre seconde version, le fichier verif.js est appelé avant que le code HTML ne soit créé. Or ce javascript utilise le code HTML.
    Ou bien... vous avez laissé les balises <script> dans le .js ?

  3. #3
    Membre éprouvé
    Avatar de Rony Rauzduel
    Homme Profil pro
    En formation Architecte logiciel
    Inscrit en
    Décembre 2008
    Messages
    638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : En formation Architecte logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 638
    Points : 1 128
    Points
    1 128
    Par défaut
    Je place le script juste après la balise </form>.
    C'est une erreur de ma part, j'ai laissé les balises scripts dans
    le fichier verif.js, mais même sans cela ne marche pas.

  4. #4
    Expert éminent sénior

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Points : 79 912
    Points
    79 912
    Par défaut
    Oui, c'est bien ce que je dis, vous appelez le script avant que le HTML ne soit créé. Donc le script ne retrouve pas ce qu'il cherche.

    Placez le code js dans une fonction nommée par exemple init().
    Ensuite, appelez cette fonction dans le onload du body:

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <body onload="init();">

  5. #5
    Membre éprouvé
    Avatar de Rony Rauzduel
    Homme Profil pro
    En formation Architecte logiciel
    Inscrit en
    Décembre 2008
    Messages
    638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : En formation Architecte logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 638
    Points : 1 128
    Points
    1 128
    Par défaut
    Quitte à me répéter, j'aurai souhaité que le Javascript soit unobstrusive donc pas de Javascript dans le HTML ...

    pas de ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <body onload="init();">

  6. #6
    Expert éminent sénior

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Points : 79 912
    Points
    79 912
    Par défaut
    Quitte à me répéter, si vous ne faites pas comme ça, vous ne serez pas certain que le code HTML soit complètement généré lorsque vous appelerez le script.

    Cette version-ci vous sied-t-elle mieux ?

    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
    <html>
     
        <head>
            <title>Prototype - Interface connexion des agents</title>
            <script src="scripts/verif.js" type="text/javascript"></script>
        </head>
        <body bgcolor="white">
          <form id="demoForm">
    		<input id="button" value="Button" type="button">
    	</form>
        </body>
    </html>
     
    <script type="text/javascript">
    init();
    </script>

    Ca ne change quasi rien à votre script d'origine. Mais bon, le script est en dehors du HTML...

  7. #7
    Membre éprouvé
    Avatar de Rony Rauzduel
    Homme Profil pro
    En formation Architecte logiciel
    Inscrit en
    Décembre 2008
    Messages
    638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : En formation Architecte logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 638
    Points : 1 128
    Points
    1 128
    Par défaut
    Ceci me sied mieux, mais ce que j'ai du mal à comprendre et sûrement me l'expliquerai-vous, est ceci :

    Toute la littérature actuelle sur le DOM 2 nous dit qu'il ne faut pas
    que le Javascript soit dans le HTML réservé au contenu mais comment
    faire pour que ce dernier ne le soit pas?

  8. #8
    Expert éminent sénior

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Points : 79 912
    Points
    79 912
    Par défaut
    Il faut entendre que le contenu du HTML est son <body>. Et donc générallement on utilise le <head> et le <body onload="..."> pour définir son Javascript de manière sûre.



    Edit: faire attention également au fait que Javascript n'est pas activé par tous les utilisateurs et que, si possible, le site puisse fonctionner sans Javascript. De manière moins jolie et agréable pour l'utilisateur, certes, mais fonctionner quand même.

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 162
    Points : 209
    Points
    209
    Par défaut
    Bonjour,

    Si tu ne souhaites pas utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <body onload="init();">
    qui, au passage, est une bonne pratique de bien séparer le js / html, tout comme on sépare css/html...

    Bref, tu peux de la même façon utiliser le addEventListener sur le "load" de l'objet window de la même façon que tu l'utilises sur le click de ton element #demoform.

    J'utilise en général les fonctions suivantes pour gérer les évènements :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function addEvent(obj,event,fct)
    {
        if (obj.attachEvent)
            obj.attachEvent('on' + event,fct);
        else obj.addEventListener(event,fct,true);
    }
     
    function removeEvent(obj,event,fct)
    {
        if (obj.detachEvent)
            obj.detachEvent('on'+event,fct);
        else obj.removeEventListener(event,fct,true);
    }
    Et donc, appliqué à ton document ça pourrait donner qq chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    addEvent(window,"load",function(){
    	var demoform = document.getElementById("demoform");
    	addEvent(demoform,"click",function(){
    		alert("click");
    	});
    });
    A+

  10. #10
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    @transact : espece de maniaque de la propreté (on dirait moi )

    Allez va, je te comprends bien...

    On est bien d'accord : AUCUN extrait de JS dans ton HTML.
    En revanche, dans ton fichier verif.js :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if (window.addEventListener) {  
         window.addEventListener('load', INITIALISATION, false);
    } 
    else if (window.attachEvent) {  
      window.attachEvent('onload', INITIALISATION);  
    }
     
    function INITIALISATION() {
       // place ici toutes les fonctions que tu veux, elles s'éxécuteront 
       // quand la page sera chargée. C'est donc aussi ici que tu dois placer 
       //tous les autres éventuels écouteurs d'événements (actions des boutons, etc.)
    }
    Ca permet d'avoir un HTML 100% *js-free* ^^

  11. #11
    Membre éprouvé
    Avatar de Rony Rauzduel
    Homme Profil pro
    En formation Architecte logiciel
    Inscrit en
    Décembre 2008
    Messages
    638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : En formation Architecte logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 638
    Points : 1 128
    Points
    1 128
    Par défaut
    Merci pour ce script, par contre dans le script, je souhaite que
    la validité du mail soit vérifié donc j'ai ceci :

    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
     
    if (window.addEventListener) {  
         window.addEventListener('submit', verification_mail, false);
    } 
    else if (window.attachEvent) {  
      window.attachEvent('submit', verification_mail);  
    }
     
    function verification_mail(mail) {	
    	var elt = document.getElementById('identForm').value;
    	if (elt.indexOf("@aquitaine.fr") >=0) {
    		return true;
    	} else {
    		alert('Mail invalide ...');
    		document.forms.demoForm.reset();
    		return false;
    	}
    }
    dans mon fichier HTML ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <form name="demoForm" action="envoyer.php">
    		<p>
    		<label for="edtIdent" accesskey="I"><b>Identifiant*</b></label>
    			<input type="text" id="identForm" name="mail" tabindex="1"/>
    		</p>
    		<p class="submit">
    			<input type="submit" value ="Envoyer" accesskey="E" tabindex="2"/>
    		</p>
    	</form>
    Mais même si le mail est invalide, il me renvoi vers la page envoyer.php qui es là pour la validation.
    Il semblerait qu'il faille capturer l'évènement pour recharger la page.

    Merci d'avance.
    Transact.

  12. #12
    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,

    Remplace la chaine 'submit' par 'onsubmit' dans la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    window.attachEvent('onsubmit', verification_mail);
    Ca devrait le faire.

  13. #13
    Membre éprouvé
    Avatar de Rony Rauzduel
    Homme Profil pro
    En formation Architecte logiciel
    Inscrit en
    Décembre 2008
    Messages
    638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : En formation Architecte logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 638
    Points : 1 128
    Points
    1 128
    Par défaut
    Cela ne résout pas mon problème même si la syntaxe exact est onsubmit pour un évènement devant être compris par IE.

    En fait je voudrai que si l'adresse mail n'est pas valide que la propagation de l'évènement n'est pas lieu et que la page
    agent.html soit rechargée.

  14. #14
    Membre éprouvé
    Avatar de Rony Rauzduel
    Homme Profil pro
    En formation Architecte logiciel
    Inscrit en
    Décembre 2008
    Messages
    638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : En formation Architecte logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 638
    Points : 1 128
    Points
    1 128
    Par défaut
    [Résolu]

    Voici le code permettant d'effectuer cette opération, il faut mettre
    un Event.stop(event); en utilisant Prototype.

    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
     
     
    if (window.addEventListener) {  
         window.addEventListener('submit', mailUnsigned, false);
    } 
    else if (window.attachEvent) {  
      window.attachEvent('onsubmit', mailUnsigned);  
    }
     
    function mailUnsigned(event) {
    	var login = $F('login').strip();
    	if (login.endsWith('@aquitaine.fr') == false ) {
    		alert("// Identifiant de connexion incorrect.");
    		Event.stop(event);
    	} else {
    		alert("// Identifiant validé pour cette session.");
    	}
    }

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 10/04/2007, 16h26
  2. Réponses: 20
    Dernier message: 19/09/2006, 20h52
  3. Utilisation de la méthode FIND
    Par Jeannot45 dans le forum Access
    Réponses: 3
    Dernier message: 09/01/2006, 15h41
  4. [Ant] Utilisation de la méthode clone()
    Par Shabata dans le forum ANT
    Réponses: 1
    Dernier message: 01/12/2005, 15h01
  5. [Select()/Focus()] Pb dans l'utilisation de ces méthodes
    Par Kylen dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 23/06/2005, 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