Comment désactiver HREF si onclick est exécuté?
j'ai une ancre avec les attributs à la fois HREF
et ONCLICK
mis. Si cliqué et Javascript est activé, je veux qu'il seulement exécuter ONCLICK
et ignorer HREF
. De même, si Javascript est désactivé ou non pris en charge, je veux qu'il suive L'URL HREF
et ignore ONCLICK
. Ci-dessous est un exemple de ce que je fais, qui exécuterait le JS et suivrait le lien simultanément (habituellement le JS est exécuté et puis la page change):
<A HREF="http://example.com/no-js-login" ONCLICK="yes_js_login()">Log in</A>
Quelle est la meilleure façon de faire cela?
j'espère une réponse Javascript, mais j'accepte n'importe quelle méthode tant qu'elle fonctionne, surtout si cela peut être fait avec PHP.
J'ai lu " "un lien href exécute et redirige la page avant que la fonction javascript onclick soit capable de terminer "déjà, mais il ne retarde que HREF
, mais ne le désactive pas complètement. Je suis je cherche aussi quelque chose de beaucoup plus simple.
11 réponses
vous pouvez utiliser la première solution non éditée, si vous mettez le retour en premier dans l'attribut onclick
:
<a href="https://example.com/no-js-login" onclick="return yes_js_login();">Log in</a>
yes_js_login = function() {
// Your code here
return false;
}
exemple: https://jsfiddle.net/FXkgV/289 /
yes_js_login = function() {
// Your code here
return false;
}
si vous retournez false il devrait empêcher l'action par défaut (allant à la href).
Edit: Désolé, mais ne semble pas fonctionner, vous pouvez faire ce qui suit:
<a href="http://example.com/no-js-login" onclick="yes_js_login(); return false;">Link</a>
désactivez simplement le comportement par défaut du navigateur en utilisant preventDefault
et passez le event
dans votre HTML.
<a href=/foo onclick= yes_js_login(event)>Lorem ipsum</a>
yes_js_login = function(e) {
e.preventDefault();
}
<a href="http://www.google.com" class="ignore-click">Test</a>
avec jQuery:
<script>
$(".ignore-click").click(function(){
return false;
})
</script>
avec JavaScript
<script>
for (var i = 0; i < document.getElementsByClassName("ignore-click").length; i++) {
document.getElementsByClassName("ignore-click")[i].addEventListener('click', function (event) {
event.preventDefault();
return false;
});
}
</script>
Vous assigner classe .ignore-click
autant d'éléments que vous aimez et clique sur ces éléments seront ignorés
vous pouvez utiliser ce code simple:
<a href="" onclick="return false;">add new action</a><br>
, C'est plus simple si vous passez un paramètre d'événement comme ceci:
<a href="#" onclick="yes_js_login(event);">link</a>
function yes_js_login(e) {
e.stopImmediatePropagation();
}
j'ai résolu une situation où j'avais besoin d'un modèle pour l'élément qui traiterait alternativement une URL régulière ou un appel javascript, où la fonction js a besoin d'une référence à l'élément appelant. Dans javascript, "ceci" fonctionne comme une référence autonome seulement dans le contexte d'un élément de forme, par exemple, un bouton. Je ne voulais pas un bouton, juste l'apparence d'un lien régulier.
exemples:
<a onclick="http://blahblah" href="http://blahblah" target="_blank">A regular link</a>
<a onclick="javascript:myFunc($(this));return false" href="javascript:myFunc($(this));" target="_blank">javascript with self reference</a>
les attributs href et onClick ont les mêmes valeurs, sauf que j'ajoute "return false" sur onClick quand c'est un appel javascript. Avoir "return false" dans la fonction appelée n'a pas fonctionné.
cela pourrait aider. Pas de JQuery nécessaire
<a href="../some-relative-link/file"
onclick="this.href = 'https://docs.google.com/viewer?url='+this.href; this.onclick = '';"
target="_blank">
ce code fait ce qui suit: Passer le lien relatif à Google Docs Viewer
- Obtenir le lien complet de la version de l'ancre par
this.href
- ouvrir le lien la nouvelle fenêtre.
donc dans votre cas cela pourrait fonctionner:
<a href="../some-relative-link/file"
onclick="this.href = 'javascript:'+console.log('something has stopped the link'); "
target="_blank">
cela a fonctionné pour moi:
<a href="" onclick="return false;">Action</a>
dans mon cas, j'avais une condition quand l'utilisateur cliquait sur l'élément" a". La condition était:
si l'autre section avait plus de dix articles, alors l'utilisateur ne devrait pas être redirigé vers une autre page.
Si l'article avait moins de dix articles, puis l'utilisateur doit être redirigé vers une autre page.
la fonctionnalité des éléments" a " dépend de l'autre composante. Le code dans l'événement de clic est le suivant:
var elementsOtherSection = document.querySelectorAll("#vehicle-item").length;
if (elementsOtherSection> 10){
return true;
}else{
event.preventDefault();
return false;
}