Comment activer ou désactiver une ancre en utilisant jQuery?
Réponses
Trop de publicités?Pour éviter une ancre à la suite de la spécifiés href
, je conseille preventDefault()
:
// jQuery 1.7+
$(function () {
$('a.something').on("click", function (e) {
e.preventDefault();
});
});
// jQuery < 1.7
$(function () {
$('a.something').click(function (e) {
e.preventDefault();
});
// or
$('a.something').bind("click", function (e) {
e.preventDefault();
});
});
Voir:
http://docs.jquery.com/Events/jQuery.Event#event.preventDefault.28.29
Voir aussi cette question précédente sur les DONC:
L'application sur laquelle je travaille actuellement le fait avec un style CSS en combinaison avec le javascript.
a.disabled { color:gray; }
Ensuite, chaque fois que je veux désactiver un lien, j'appelle
$('thelink').addClass('disabled');
Ensuite, dans le gestionnaire de clics pour 'thelink' une balise, je lance toujours une première vérification
if ($('thelink').hasClass('disabled')) return;
J'ai trouvé une réponse que j'aime beaucoup mieux ici
Ressemble à ça:
$(document).ready(function(){
$("a").click(function () {
$(this).fadeTo("fast", .5).removeAttr("href");
});
});
L'activation impliquerait la définition de l'attribut href
$(document).ready(function(){
$("a").click(function () {
$(this).fadeIn("fast").attr("href", "http://whatever.com/wherever.html");
});
});
Cela vous donne l'apparence que l'élément d'ancrage devient un texte normal et vice versa.
Je pense qu'une solution plus intéressante consiste à définir l'attribut de données désactivé et à en vérifier la valeur par clic. De cette façon, nous pouvons désactiver temporairement une ancre jusqu'à ce que le javascript soit terminé avec un appel ajax ou des calculs. Si nous ne le désactivons pas, nous pouvons rapidement cliquer dessus quelques fois, ce qui est indésirable ...
$('a').live('click', function () {
var anchor = $(this);
if (anchor.data("disabled")) {
return false;
}
anchor.data("disabled", "disabled");
$.ajax({
url: url,
data: data,
cache: false,
success: function (json) {
// when it's done, we enable the anchor again
anchor.removeData("disabled");
},
error: function () {
// there was an error, enable the anchor
anchor.removeData("disabled");
}
});
return false;
});
J'ai fait un exemple jsfiddle: http://jsfiddle.net/wgZ59/76/