Jak zapobiec domyślnej obsłudze zdarzeń w metodzie onclick?


88

Jak zapobiec default w metodzie onclick? Mam metodę, w której przekazuję również wartość niestandardową

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

Odpowiedzi:


106

Pozwól, aby Twoje wywołanie zwrotne powróciło falsei przekaż je do programu onclickobsługi:

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

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

Aby jednak stworzyć możliwy do utrzymania kod, należy powstrzymać się od używania „wbudowanego JavaScript” (tj. Kodu znajdującego się bezpośrednio w tagu elementu) i modyfikować zachowanie elementu za pomocą dołączonego pliku źródłowego JavaScript (nazywa się to dyskretnym JavaScriptem ).

Marża:

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

Kod (osobny plik):

// 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 Tak, to działa. Powinieneś dostosować swoje skrzypce i zmienić onLoadedna no wrap. Lub po prostu napisz własne znaczniki .html.
Linus Kleen

1
Zobacz odpowiedź poniżej! „Moim zdaniem odpowiedź jest błędna! Poprosił o event.preventDefault (); kiedy po prostu zwrócisz false; wywoła event.preventDefault (); AND event.stopPropagation (); również!”
Ravindranath Akila

1
Aby być wybrednym, pytanie OP nigdy nie wspomina preventDefault, pytanie brzmi, jak „zapobiec [] domyślnemu kliknięciu” .
Linus Kleen,

1
@LinusKleen, powiedz też proszę, jak zapobiec kliknięciu w tym przypadku
vp_arth

1
@vp_arth Użyj do tego „kliknięcia CSS”. Spójrz na to pytanie .
Linus Kleen,

46

Moim zdaniem odpowiedź jest błędna! Zapytał, event.preventDefault();kiedy po prostu zwracasz fałsz; woła również event.preventDefault();AND event.stopPropagation();!

Możesz to rozwiązać w ten sposób:

<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
Polegasz na tym, window.eventco nie zawsze jest dostępne w różnych przeglądarkach.
Linus Kleen,

Edytowano, aby dodać: wydarzenie = wydarzenie || window.event;
Nigel Fds

45

Spróbuj tego (ale w takich przypadkach użyj przycisków, jeśli nie masz prawidłowej hrefwartości dla wdzięcznej degradacji )

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

1
ładne po prostu najlepsze. Chcę tego samego dla event.preventDefault ();
Sameer Kazi

U mnie zadziałało, ale czy możesz wyjaśnić, dlaczego musisz return false;? Do czego w ogóle wracamy fałszywie?
Kolob Canyon

możesz po prostu zwrócić zamiast zwracać false, powrót pozwoli uniknąć przechodzenia linku do href. Z technicznego punktu widzenia w takich przypadkach powinniśmy użyć przycisku.
Aamir Afridi

12

Możesz przechwycić zdarzenie, a następnie zablokować je za pomocą PreventDefault () - działa z czystym JavaScriptem

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

11

Po prostu umieść „javascript: void (0)” zamiast „#” w tagu href

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

9

To zadziałało dla mnie

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


0

Zmiana sposobu użycia funkcji na wszystkich stronach HTML na return false.

Oto przetestowane rozwiązanie, które łata tylko samą funkcję:

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;
}    

To poprawnie zapobiega odwiedzaniu przeglądarek IE6, IE11 i najnowszej przeglądarki Chrome href="#"po zakończeniu obsługi zdarzeń onclick.

Kredyty:


0

Jeśli musisz umieścić to w tagu. Nie jest to najlepsze rozwiązanie, ale zadziała.

Upewnij się, że zdarzenie onclick zostało umieszczone przed href. Pracowałem tylko dla mnie w ten sposób.

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

0

Innym sposobem na to jest użycie eventobiektu wewnątrz atrybutu onclick(bez konieczności dodawania dodatkowego argumentu do funkcji w celu przekazania zdarzenia)

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


-3

Podaj klasę lub identyfikator elementowi i użyj funkcji jquery unbind ();

$(".slide_prevent").click(function(){
                $(".slide_prevent").unbind();
              });
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.