web-dev-qa-db-fra.com

Evénement d'accès à l'appel de preventdefault depuis une fonction personnalisée à partir de l'attribut onclick de la balise

J'ai des liens comme celui-ci:

<a href="#" onclick="myfunc({a:1, b:'hi'})" />click</a>
<a href="#" onclick="myfunc({a:3, b:'jo'})" />click</a>

et je voudrais faire un preventDefault() dans myfunc, car un # sera ajouté dans la barre d'adresse en cliquant sur le lien (sans faire return false; ni href='javascript:void(0);')

est-ce possible ? puis-je obtenir l'événement dans myfunc

99
Omu

Je crois que vous pouvez passer event dans la fonction inline qui sera l’objet event de l’événement déclenché dans les navigateurs compatibles W3C (c’est-à-dire que les anciennes versions de IE nécessiteront toujours une détection à l'intérieur de votre fonction de gestionnaire d’événements à regarder window.event).

n exemple rapide.

function sayHi(e) {
   e.preventDefault();
   alert("hi");
}
<a href="http://google.co.uk" onclick="sayHi(event);">Click to say Hi</a>
  1. Exécutez-le tel quel et notez que le lien ne redirige pas vers Google après l'alerte.
  2. Ensuite, modifiez la event transmise dans le gestionnaire onclick par un autre élément tel que e, cliquez sur Exécuter, puis notez que la redirection a lieu après l'alerte (le volet de résultats devient blanc, ce qui montre une redirection).
141
Russ Cam

La solution la plus simple est simplement:

<a href="#" onclick="event.preventDefault(); myfunc({a:1, b:'hi'});" />click</a>

C'est en fait un bon moyen de contourner le cache pour les documents avec un repli pour aucun navigateur compatible JS (pas de contournement de cache si aucun JS)

<a onclick="
if(event.preventDefault) event.preventDefault(); else event.returnValue = false;
window.location = 'http://www.domain.com/docs/thingy.pdf?cachebuster=' + 
Math.round(new Date().getTime() / 1000);" 
href="http://www.domain.com/docs/thingy.pdf">

Si JavaScript est activé, il ouvre le PDF avec une chaîne de requête de contournement du cache, sinon il ouvre simplement le PDF.

96
JuLo

Essaye ça: 

<script>
    $("a").click(function(event) {
        event.preventDefault(); 
    });
</script>
10
Suave Nti
<script type="text/javascript">
$('a').click(function(){
   return false;
});
<script>
7
Aram Mkrtchyan

Ajoutez une classe unique aux liens et un javascript qui empêche les liens par défaut avec cette classe:

<a href="#" class="prevent-default" 
   onclick="$('.comment .hidden').toggle();">Show comments</a>

<script>
  $(document).ready(function(){

    $("a.prevent-default").click(function(event) {
         event.preventDefault(); 
          });
  });
</script>
5
aaandre

Je pense que lorsque nous utilisons onClick, nous voulons faire quelque chose de différent de celui par défaut. Donc, pour tous vos liens avec onClick:

$("a[onClick]").on("click", function(e) {
  return e.preventDefault();
});
4
Ronan

Ne pouvez-vous pas simplement supprimer l'attribut href de la balise a?

3
Leigh Ciechanowski

Vous pouvez accéder à l'événement depuis onclick comme ceci:

<button onclick="yourFunc(event);">go</button>

et à votre fonction javascript, mon conseil est d'ajouter cette instruction de première ligne comme suit:

function yourFunc(e) {
    e = e ? e : event;
}

puis utilisez partout e comme variable d'événement

1
gdarcan

Simple!

onclick="blabla(); return false"
1
Jake

e.preventDefault (); from https://developer.mozilla.org/en-US/docs/Web/API/event.preventDefault

Ou avoir renvoyer faux de votre méthode.

0
rahul singh Chauhan