Empêcher l'action onclick avec jQuery
il y a quelques liens avec l'événement onclick actions
<a href="#" onclick="alert('panic!')">Let's panic</a>
<a href="#" onclick="alert('panic!')" disabled="disabled">I can't panic no more</a>
J'ai besoin de prévenir les cas actons d'exécution sur les liens avec désactivé attribut sans enlever onclick actions.
$('a[disabled]').click(function(e){
e.stopPropagation();
return false;
});
Ce code ne me permet.
mise à jour Même ce code ne fonctionne pas
<html><head><script type='text/javascript' src='jquery-1.3.2.js'></script></head>
<body>
<a href='#' onclick="alert('HA-ha!')" disabled="disabled" class="disabled">TEST</a>
<script type="text/javascript">
$('a[disabled], a.disabled').click(function(e){
console.log('override?');
e.stopImmediatePropagation();
e.preventDefault();
e.stopPropagation();
return false;
});
</script>
</body></html>
return false;
vse.preventDefault();
vse.stopPropagation();
discussion trouvé ici: stackoverflow.com/questions/1357118/...- Tous vos jQuery code doit être enveloppé dans un
$(document).ready( function() { ...code here... } );
Qui, en combinaison avec la suppression de ladisabled
tag de votre balisage et le sélecteur doit obtenir des choses de travail.
Vous devez vous connecter pour publier un commentaire.
jQuery ne va pas résoudre ce un OOTB. Il peut aider, mais aucun de
stopPropagation
,stopImmediatePropagation
,preventDefault
,return false
de travailler si vous il suffit de l'attacher à l'élément. Vous devez remplacer l'élément du gestionnaire de clic.Cependant vous dites dans votre question "sans enlever onclick" actions. Si vous avez besoin de remplacer le comportement par défaut au moment du déclenchement de l'événement (par opposition à la plus propre approche de simplement
null
ing leonclick
attribut pour les personnes handicapées ancrages):Voici ce que je veux dire:
Démo ici.
L'approche y est de remplacer la ligne cliquez sur gestionnaire (
onclick
) avec de préemption logique pour attraper le cas où l'ancre est "désactivé" et puis annuler l'événement (avecreturn false
).L'avantage est que pour permettre à une ancre de nouveau, il vous suffit de
.removeAttr('disabled')
sur elle.event || window.event
nécessaire puisque jQuery déjà normalise les navigateurs et lesevent
est l'objet nettoyé version par le temps de votre code appelle?onclick
) que le navigateur appelle, pas un gestionnaire de jQuery normalise et l'appelle.eval(event.currentTarget.getAttribute('onclick'));
au lieu de$(this).data('onclick').call(this, event || window.event);
. Les deux solutions fonctionnent. Merci!disabled
n'est pas une propriété des ancres. Utilisez quelque chose commerel='disabled'
à la place.Mise à jour:
Ah, bien sûr. - Il encore les feux de la
alert
parce que c'est en fait incluse dans le balisage! Je n'ai jamais le faire et ainsi ne pas le remarquer. Prendre cliquez sur gestionnaire de l'annotation et de le faire en jQuery, en premier lieu, et ainsi, vous pouvez tout simplement faire quelque chose comme:a[disabled="disabled"]
travail, mais IMO c'est une mauvaise idée. Stick avec des balises valides 🙂Le problème est que jQuery ajoute des événements dans l'ordre. Pour arrêter d'autres événements, les événements dont vous avez besoin pour arrêter doit venir après votre arrêt de code. Puisque vous avez le code dans votre sur un clic, vous aurez besoin de changer l'ordre. C'est ce que je ferais:
L'intérêt est juste de supprimer/ajouter les handicapés de la classe à l'aide de jQuery:
$('a#whatever').addClass('disabled')
ou supprimer$('a#whatever').removeClass('disabled')
et aucune autre de nettoyage/de l'installation est nécessaire.Tout des gestionnaires de clic ajouté par jQuery semblent feu après ceux ajoutés dans la marque vers le haut. Ma solution serait d'appliquer les gestionnaires de clic à l'aide de jQuery au lieu de la marque vers le haut, mais vous ne pouvez pas avoir suffisamment de contrôle sur le code pour faire cela. Si vous le faites, alors il vous suffit de ne pas appliquer le gestionnaire de clic pour ancrer les balises de classe désactivé (et, oui, je voudrais utiliser une classe plutôt qu'un attribut inapproprié). Si vous n'avez pas de contrôle sur la marque vers le haut, alors vous voudrez peut remplacer le gestionnaire de clic à l'aide de jQuery, de les stocker pour plus tard demande.
Testé avec:
Je l'ai trouvé assez simple solution pour éviter onclicks aujourd'hui, mais en gardant à l'action si vous en avez besoin.
Je ne suis pas un grand fan de l'utilisation de "javascript:" mais c'est de loin la solution la plus simple au problème.
Espère que cela aide!
I'm not a huge fan of using "javascript:", but this was by far the simplest solution to the problem.
Vous préférez l'autre côté client, les langages de script n'ya?