Partage
  • Partager sur Facebook
  • Partager sur Twitter

Un événement qui ne peut se produire qu'une fois ?

o_O

Sujet résolu
    30 avril 2009 à 0:30:14

    Bonsoir,

    Alors comme je l'ai dit dans un topic récent, je me suis mis à étudier la création d'événements personnalisés via document.createEvent() .

    J'ai donc fait ce petit code, avec le très joli événement prout :

    <script type="text/javascript">
    var p;
    window.onload=function() {
      p = document.createEvent("Event");
      p.initEvent("prout",false,false);
      document.getElementById("yop").addEventListener("prout",action,false);
    };
    
    function action(evt) {
    alert("yeaaah !");
    }
    
    function fire() {
    document.getElementById("yop").dispatchEvent(p);
    }
    </script>
    
    <button onclick="fire();">Yopyop</button>
    
    <div id="yop">blabla</div>
    


    Lors du premier clic sur le bouton, tout va bien, l'alerte se déclenche. Ok.
    Mais si j'ose un deuxième clic, là, Firebug me crie dessus :
    uncaught exception: [Exception... "Component returned failure code: 0x80070057 (NS_ERROR_ILLEGAL_VALUE) [nsIDOMEventTarget.dispatchEvent]" nsresult: "0x80070057 (NS_ERROR_ILLEGAL_VALUE)" location: "JS frame :: file:///D:/test2.htm :: fire :: line 14" data: no]


    Il semblerait qu'il ne veuille pas refaire le dispatchEvent() ... :euh:

    Qu'ai-je mal fait ?

    Merci d'avance pour vos réponses. :)
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      30 avril 2009 à 0:37:07

      J'ai rien testé et je suis pas au point là dessus mais en toute logique il faut que tu crée un autre évènement. tu réutilise pas un évènement mouseover et compagnie, c'est toujours un nouvel évènement. Donc il faut que tu recrée un nouvel évènement à chaque appel de fire();
      • Partager sur Facebook
      • Partager sur Twitter
        30 avril 2009 à 0:56:20

        Galèèèère...

        Mais donc je suppose que cela est "automatisé" pour les événements "click", etc. ? Comment est-ce faisable ?
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          30 avril 2009 à 1:06:46

          hé ?

          Si toi tu veux déclancher des évènements tu dois toujours en crée un nouveau. Le navigateur il fait sa soupe dans son coin.

          Tu fout ça dans une fonction et pouf pouf. pour te retrouver avec un truc du genre declancher(element, "evenement");
          • Partager sur Facebook
          • Partager sur Twitter
            30 avril 2009 à 1:26:00

            Mouais, bon j'y arrive pas, mais c'pas grave... J'avais juste envie d'aller voir un peu comment ça fonctionnait :p

            Merci pour tes réponses. ;)
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              30 avril 2009 à 1:48:21

              Fatigué hein :p

              <button onclick="fire();">Yopyop</button>
              
              <div id="yop">blabla</div>
              
              
              
              
              
              <script type="text/javascript">
              window.onload=function() {
                  document.getElementById("yop").addEventListener("prout",action,false);
              };
              
              function action(evt) {
                  alert("yeaaah !");
              }
              
              function fire() {
                  var p = document.createEvent("Event");
                  p.initEvent("prout",false,false);
                  
                  document.getElementById("yop").dispatchEvent(p);
              }
              </script>
              


              pouf, pouf.

              D'ailleurs donnez votre avis sur ce qui vous interesse le plus :
              - closures
              - évènements
              - Modèle objet et héritage
              - autre ?
              C'est pas impossible que je fasse un mini-tuto dessus pour expliquer…
              • Partager sur Facebook
              • Partager sur Twitter
                30 avril 2009 à 2:05:02

                Aaah ouais ! J'avais pas pensé qu'on pouvait faire le addEventListener avant la création de l'événement ^^


                Sinon, pour ce qui est du mini-tuto, Darkodam va normalement en faire un sur les closures...

                Evénements, objets et héritage, autre, oui, tout est intéressant. :) C'est pas un mini-tuto qu'il faut que tu fasses, c'est un big-tuto "JS avancé".



                (Oui, fatigué... ^^ Bonne nuit petit nod_ !)
                • Partager sur Facebook
                • Partager sur Twitter

                Un événement qui ne peut se produire qu'une fois ?

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown