Partage
  • Partager sur Facebook
  • Partager sur Twitter

Bloquer tous les listeners d'un événement

Sujet résolu
    18 janvier 2018 à 15:55:35

    Bonjour à tous,

    J'ai un input avec des listeners sur le .on('click').

    Je n'ai pas accès à ces listeners, je sais juste qu'il y en a.

    Je souhaite bloquer l'exécution de tous dans certains cas, et les réactiver tous dans d'autres cas.

    J'ai essayé e.stopPropagation(), e.stopImmediatePropagation. e.preventDefault() et return false mais sans succès. Pas possible de .off('click') évidemment sinon je les perds tous et comme je l'ai dit plus haut je n'y ai pas accès, je sais juste qu'ils sont présents.

    Quelqu'un aurait il une solution à me proposer ?

    Merci d'avance pour vos propositions.

    • Partager sur Facebook
    • Partager sur Twitter
      18 janvier 2018 à 16:02:45

      Hello

      Un disable sur le input?

      https://jsfiddle.net/Krogoth/epzafk7n/

      -
      Edité par Krogoth 18 janvier 2018 à 16:06:03

      • Partager sur Facebook
      • Partager sur Twitter
      Un petit +1 si je vous ai aidé est toujours appréciable :).
        18 janvier 2018 à 16:12:28

        @Krogoth

        C'est un <input type="text"/>, je souhaite qu'il reste éditable, désolé je n'avais pas précisé :)

        • Partager sur Facebook
        • Partager sur Twitter
          29 janvier 2018 à 9:48:26

          Pas de réponse, tant pis je ferme.
          • Partager sur Facebook
          • Partager sur Twitter
            29 janvier 2018 à 10:07:22

            Tu peux effectivement utiliser la propagation et les phases de propagations (en natif car jquery ne gère la phase de propagation descendante). 

            Par exemple, si tous tes inputs ont un ancêtre commun, tu peux mettre en place un écouteur de click en phase descendante et stopper la propagation. Dans ce cas, le click ne sera pas tansmis aux inputs et donc l'action correspondante ne sera pas exécutée 

            ancetre.addEventListener("click",stopperClick,true);
            
            function stopperClick(evt) {
                evt.stopPropagation();
            }
            

            Pour  remettre en place la propagation il te suffit de supprimer l'écouteur 

            ancetre.removeEventListener("click",stopperClick,true);

            Par contre, attention, aucun élément de cette boite ne recevra le click. 

            Si tu souhaites que certains puissent le recevoir, tu peux tester les caractéristiques de la cible du lien à l'aide de la propriété evt.target

            • Partager sur Facebook
            • Partager sur Twitter

            Bloquer tous les listeners d'un événement

            × 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