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 ?

84voto

klaus Points 614

Dans mon cas :

$('#some_link').click(function(event){
    event.preventDefault();
});

$('#some_link').unbind('click'); a fonctionné comme la seule méthode pour restaurer l'action par défaut.

Comme vu ici : https://stackoverflow.com/a/1673570/211514

59voto

foxybagga Points 1345

C'est assez simple

Supposons que vous fassiez quelque chose comme

document.ontouchmove = function(e){ e.preventDefault(); }

Maintenant, pour revenir à la situation d'origine, faites ce qui suit...

document.ontouchmove = function(e){ return true; }

De ce sitio web .

18voto

Val Points 7050

Il n'est pas possible de restaurer un preventDefault() mais ce que vous pouvez faire, c'est la tromper :)

<div id="t1">Toggle</div>
<script type="javascript">
$('#t1').click(function (e){
   if($(this).hasClass('prevented')){
       e.preventDefault();
       $(this).removeClass('prevented');
   }else{
       $(this).addClass('prevented');
   }
});
</script>

Si vous voulez aller plus loin, vous pouvez même utiliser le bouton de déclenchement pour déclencher un événement.

11voto

Atara Points 892
function DoPrevent(e) {
  e.preventDefault();
  e.stopPropagation();
}

// Bind:
$(element).on('click', DoPrevent);

// UnBind:
$(element).off('click', DoPrevent);

9voto

adardesign Points 6182

Dans certains cas*, vous pouvez initialement return false au lieu de e.preventDefault() puis, lorsque vous souhaitez rétablir la valeur par défaut de l'option return true .

*Lorsque vous ne vous préoccupez pas du bouillonnement de l'événement et que vous n'utilisez pas l'option e.stopPropagation() en même temps que e.preventDefault()

Voir aussi question similaire (également dans stack Overflow)

ou dans le cas d'une case à cocher vous pouvez avoir quelque chose comme :

$(element).toggle(function(){
  $(":checkbox").attr('disabled', true);
  },
function(){
   $(":checkbox").removeAttr('disabled');
})

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