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.
est-il possible de restaurer le gestionnaire par défaut?
javascript
jquery
events
preventdefault
event-bubbling
Stijn de Witt
la source
la source
preventDefault
fois qu'il a été appelé. Actuellement, cette question est en fait «comment dissocier un écouteur d'événement avec jQuery?».Réponses:
Dans mon cas:
$('#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
la source
C'est assez simple
Supposons que vous fassiez quelque chose comme
maintenant, pour revenir à la situation d'origine, procédez comme suit ...
À partir de ce site Web .
la source
Il n'est pas possible de restaurer un
preventDefault()
mais ce que vous pouvez faire est de le tromper :)Si vous souhaitez aller plus loin, vous pouvez même utiliser le bouton de déclenchement pour déclencher un événement.
la source
la source
dans certains cas * vous pouvez initialement
return false
au lieu dee.preventDefault()
, puis lorsque vous souhaitez restaurer la valeur par défautreturn true
.* Cela signifie que lorsque l'événement bouillonne ne vous dérange pas et que vous n'utilisez pas le
e.stopPropagation()
avece.preventDefault()
Voir également la question similaire (également dans le débordement de pile)
ou dans le cas de la case à cocher, vous pouvez avoir quelque chose comme:
la source
Vous pouvez restaurer l'action par défaut (s'il s'agit d'un suivi HREF) en procédant comme suit:
window.location = $(this).attr('href');
la source
s'il s'agit d'un lien
$(this).unbind("click");
, réactiverait le clic sur le lien et le comportement par défaut serait restauré.J'ai créé une démonstration de violon JS pour montrer comment cela fonctionne:
Voici le code du violon JS:
HTML:
Javascript:
la source
Testez ce code, je pense résoudre votre problème:
Référence
la source
La meilleure façon de faire cela en utilisant l'espace de noms. C'est un moyen sûr et sécurisé. Ici .rb est l'espace de noms qui garantit que la fonction de détachement fonctionne sur ce keydown particulier mais pas sur d'autres.
ref1: http://idodev.co.uk/2014/01/safely-binding-to-events-using-namespaces-in-jquery/
ref2: http://jqfundamentals.com/chapter/events
la source
Désactiver:
Activer:
la source
La méthode preventDefault () de l'interface Event indique à l'agent utilisateur que si l'événement n'est pas traité explicitement, son action par défaut ne doit pas être prise comme elle le serait normalement. L'événement continue à se propager comme d'habitude, sauf si l'un de ses écouteurs d'événement appelle stopPropagation () ou stopImmediatePropagation (), l'un ou l'autre mettant fin à la propagation en même temps.
L'appel de preventDefault () à n'importe quelle étape du flux d'événements annule l'événement, ce qui signifie que toute action par défaut normalement prise par l'implémentation à la suite de l'événement ne se produira pas.
Vous pouvez utiliser Event.cancelable pour vérifier si l'événement est annulable. L'appel de preventDefault () pour un événement non annulable n'a aucun effet.
la source
J'ai eu un problème où j'avais besoin de l'action par défaut uniquement après la fin d'une action personnalisée (activer les champs de saisie autrement désactivés sur un formulaire). J'ai encapsulé l'action par défaut (submit ()) dans une propre fonction récursive (dosubmit ()).
la source
if (predef == true)
c'est plus explicite, vous ajoutez 7 caractères à votre code JS sans raison.if (prevdef)
est tout aussi lisible. En outre, vous avez ajouté un gestionnaire d'événements anonyme redondant lorsque.click(dosubmit)
fait la même chose que.click(function(){dosubmit()})
si aucun paramètre n'est passé.Utilisez un booléen:
J'utilise ceci dans une application Web progressive pour empêcher le défilement / zoom sur certaines «pages» tout en autorisant d'autres.
la source
Vous pouvez définir pour former 2 classes. Après avoir défini votre script JS sur l'un d'entre eux, lorsque vous souhaitez désactiver votre script, vous supprimez simplement la classe avec le script lié de ce formulaire.
HTML:
JS
la source
la source
Je ne sais pas ce que vous voulez dire: mais voici une solution pour un problème similaire (et peut-être le même) ...
J'utilise souvent preventDefault () pour intercepter des éléments. Cependant: ce n'est pas la seule méthode d'interception ... souvent vous voudrez peut-être juste une "question" à la suite de laquelle le comportement continue comme avant ou s'arrête. Dans un cas récent, j'ai utilisé la solution suivante:
$("#content").on('click', '#replace', (function(event){ return confirm('Are you sure you want to do that?') }));
Fondamentalement, le "prévenir par défaut" est destiné à intercepter et à faire autre chose: le "confirm" est conçu pour être utilisé dans ... eh bien - confirmer!
la source