110 votes

Comment empêcher la gestion des événements par défaut dans une méthode onclick ?

Comment empêcher les défauts dans une méthode onclick ? J'ai une méthode dans laquelle je passe également une valeur personnalisée.

<a href="#" onclick="callmymethod(24)">Call</a>

function callmymethod(myVal){
    //doing custom things with myVal
    //here I want to prevent default
}

141voto

Linus Kleen Points 15925

Laissez votre callback retourner false et le transmettre à la onclick manipulateur :

<a href="#" onclick="return callmymethod(24)">Call</a>

function callmymethod(myVal){
    //doing custom things with myVal
    //here I want to prevent default
    return false;
}

Pour créer maintenable cependant, vous devez vous abstenir d'utiliser le code "inline Javascript" (c'est-à-dire le code qui se trouve directement dans la balise d'un élément) et de modifier le comportement d'un élément via un fichier source Javascript inclus (il s'appelle Javascript discret ).

La majoration :

<a href="#" id="myAnchor">Call</a>

Le code (fichier séparé) :

// Code example using Prototype JS API
$('myAnchor').observe('click', function(event) {
    Event.stop(event); // suppress default click behavior, cancel the event
    /* your onclick code goes here */
});

70voto

Wawa Points 519

A mon avis, la réponse est fausse ! Il a demandé event.preventDefault(); lorsque vous retournez simplement false ; il appelle event.preventDefault(); ET event.stopPropagation(); également !

Vous pouvez le résoudre de cette façon :

<a href="#" onclick="callmymethod(event, 24)">Call</a>

function callmymethod(e, myVal){
    //doing custom things with myVal

    //here I want to prevent default
    e = e || window.event;
    e.preventDefault();
}

6 votes

Vous comptez sur window.event qui n'est pas toujours disponible dans tous les navigateurs.

0 votes

Modifié pour ajouter : event = event || window.event ;

58voto

Aamir Afridi Points 3865

Essayez ceci (mais utilisez des boutons pour ce genre de cas si vous n'avez pas un numéro de téléphone valide). href valeur pour dégradation gracieuse )

<a href="#" onclick="callmymethod(24); return false;">Call</a>

1 votes

Agréable, tout simplement le meilleur. Je veux la même chose pour event.preventDefault() ;

0 votes

Cela a fonctionné pour moi, mais pourriez-vous expliquer pourquoi vous devez return false; ? Qu'est-ce qui nous rend faux ?

0 votes

Vous pouvez simplement retourner au lieu de retourner false, retourner évitera que le lien navigue vers href. Techniquement, nous devrions utiliser le bouton pour de tels cas.

15voto

Andreas Karz Points 160

Vous pouvez attraper l'événement et ensuite le bloquer avec preventDefault() -- cela fonctionne avec du pur Javascript

document.getElementById("xyz").addEventListener('click', function(event){
    event.preventDefault();
    console.log(this.getAttribute("href"));
    /* Do some other things*/
});

14voto

Rafay Points 111

Placez simplement "javascript:void(0)", à la place de "#" dans la balise href.

<a href="javascript:void(0);" onclick="callmymethod(24)">Call</a>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X