132 votes

Comment délier un écouteur qui appelle event.preventDefault() (en utilisant jQuery) ?

Jquery toggle appelle preventDefault() par défaut, donc les valeurs par défaut ne fonctionnent pas. vous ne pouvez pas cliquer sur une case à cocher, vous ne pouvez pas cliquer sur un lien, etc etc.

est-il possible de restaurer le gestionnaire par défaut ?

9voto

crmpicco Points 2226

Vous pouvez rétablir l'action par défaut (s'il s'agit d'un suivi HREF) en procédant comme suit :

window.location = $(this).attr('href');

4voto

Rahul Gupta Points 1957

S'il s'agit d'un lien, alors $(this).unbind("click"); réactive le clic sur le lien et le comportement par défaut est restauré.

J'ai créé une démo JS fiddle pour démontrer comment cela fonctionne :

Voici le code du JS fiddle :

HTML :

<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
<a href="http://jquery.com">Default click action is prevented, only on the third click it would be enabled</a>
<div id="log"></div>

Javascript :

<script>
var counter = 1;
$(document).ready(function(){
$( "a" ).click(function( event ) {
  event.preventDefault();

  $( "<div>" )
    .append( "default " + event.type + " prevented "+counter )
    .appendTo( "#log" );

    if(counter == 2)
    {
        $( "<div>" )
    .append( "now enable click" )
    .appendTo( "#log" );

    $(this).unbind("click");//-----this code unbinds the e.preventDefault() and restores the link clicking behavior
    }
    else
    {
        $( "<div>" )
    .append( "still disabled" )
    .appendTo( "#log" );
    }
    counter++;
});
});
</script>

2voto

Web.Guard Points 53

Testez ce code, je pense que cela résoudra votre problème :

event.stopPropagation();

Référence

2voto

Rajkumar Bansal Points 155

La meilleure façon de le faire est d'utiliser les espaces de noms. C'est un moyen sûr et sécurisé. Ici, .rb est l'espace de noms qui garantit que la fonction unbind fonctionne sur cette touche particulière mais pas sur les autres.

$(document).bind('keydown.rb','Ctrl+r',function(e){
            e.stopImmediatePropagation();
            return false;
        });

$(document).unbind('keydown.rb');

ref1 : http://idodev.co.uk/2014/01/safely-binding-to-events-using-namespaces-in-jquery/

ref2 : http://jqfundamentals.com/chapter/events

2voto

Shawn W Points 395

Si l'élément n'a qu'un seul gestionnaire, il suffit d'utiliser jQuery unbind.

$("#element").unbind();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X