Come impedire la gestione degli eventi predefiniti in un metodo onclick?


90

Come prevenire il default in un metodo onclick? Ho un metodo in cui sto anche passando un valore personalizzato

<a href="#" onclick="callmymethod(24)">Call</a>
function callmymethod(myVal){
    //doing custom things with myVal
    //here I want to prevent default
}

Risposte:


107

Lascia che la tua richiamata torni falsee passala al onclickgestore:

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

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

Per creare mantenibile codice, tuttavia, si dovrebbe astenersi dall'utilizzare "inline Javascript" (vale a dire: il codice che è direttamente all'interno del tag di un elemento) e modificare il comportamento di un elemento tramite un file sorgente JavaScript incluso (si chiama JavaScript discreto ).

Il mark-up:

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

Il codice (file separato):

// 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 */
});

1
@AamirAfridi Sì, funziona. Dovresti regolare il violino e passare onLoadeda no wrap. Oppure scrivi semplicemente il tuo markup .html.
Linus Kleen

1
Si prega di vedere la risposta sotto! "Secondo me la risposta è sbagliata! Ha chiesto event.preventDefault (); quando restituisci semplicemente false; chiama event.preventDefault (); AND event.stopPropagation (); pure!"
Ravindranath Akila

1
Per essere meticolosi, la domanda dell'OP non menziona mai preventDefault, la domanda è: come "prevenire [il] clic predefinito" .
Linus Kleen

1
@LinusKleen, dì anche per favore, come evitare il clic in questo caso
vp_arth

1
@vp_arth Usa "CSS click through" per questo. Guarda questa domanda .
Linus Kleen

48

Secondo me la risposta è sbagliata! Ha chiesto event.preventDefault();quando restituisci semplicemente falso; chiama anche event.preventDefault();AND event.stopPropagation();!

Puoi risolverlo in questo modo:

<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
Stai facendo affidamento su ciò window.eventche non è sempre disponibile nei browser.
Linus Kleen

Modificato per aggiungere: evento = evento || window.event;
Nigel Fds

45

Prova questo (ma usa i pulsanti per questi casi se non hai un hrefvalore valido per il degrado grazioso )

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

1
bello semplicemente migliore. Voglio lo stesso per event.preventDefault ();
Sameer Kazi

Ha funzionato per me, ma potresti spiegare perché devi return false;? A cosa stiamo persino restituendo falsi?
Kolob Canyon

puoi semplicemente restituire invece di restituire false, la restituzione eviterà la navigazione del collegamento verso href. Tecnicamente dovremmo usare il pulsante per questi casi.
Aamir Afridi

12

Puoi catturare l'evento e quindi bloccarlo con preventDefault () - funziona con Javascript puro

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

11

Basta inserire "javascript: void (0)", al posto di "#" nel tag href

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

10

Questo ha funzionato per me

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


1

Un altro modo per farlo è utilizzare l' eventoggetto all'interno dell'attributo onclick(senza la necessità di aggiungere un argomento aggiuntivo alla funzione per passare l'evento)

function callmymethod(myVal){
    console.log(myVal);
}
<a href="#link" onclick="event.preventDefault();callmymethod(24)">Call</a>


0

Sarebbe troppo noioso modificare gli usi delle funzioni in tutte le pagine html in return false.

Quindi ecco una soluzione testata che patcha solo la funzione stessa:

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

    // cancel default event action
    var event = window.event || callmymethod.caller.arguments[0];
    event.preventDefault ? event.preventDefault() : (event.returnValue = false);

    return false;
}    

Ciò impedisce correttamente la visita di IE6, IE11 e Chrome più recente href="#"dopo il completamento del gestore di eventi onclick.

Crediti:


0

Se devi metterlo nel tag. Non è la soluzione migliore, ma funzionerà.

Assicurati di mettere l'evento onclick davanti al file href. Funzionava solo per me in questo modo.

<a onclick="return false;" href="//www.google.de">Google</a>

-3

Dare una classe o un id all'elemento e utilizzare la funzione jquery unbind ();

$(".slide_prevent").click(function(){
                $(".slide_prevent").unbind();
              });
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.