Bagaimana cara mencegah penanganan acara default dalam metode onclick?

90

Bagaimana cara mencegah default dalam metode onclick? Saya memiliki metode di mana saya juga meneruskan nilai khusus

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

Jawaban:

107

Biarkan callback Anda kembali falsedan teruskan ke onclickhandler:

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

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

Namun, untuk membuat kode yang dapat dipelihara , Anda harus tidak menggunakan "Javascript inline" (yaitu: kode yang langsung berada di dalam tag elemen) dan mengubah perilaku elemen melalui file sumber Javascript yang disertakan (disebut Javascript yang tidak mengganggu ).

Mark-up:

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

Kode (file terpisah):

// 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 */
});
Linus Kleen
sumber
1
@AamirAfridi Ya, berhasil. Anda harus menyesuaikan biola Anda dan mengubahnya onLoadedmenjadi no wrap. Atau cukup tulis markup .html Anda sendiri.
Linus Kleen
1
Silakan lihat jawabannya di bawah ini! "Menurut pendapat saya jawabannya salah! Dia meminta event.preventDefault (); ketika Anda mengembalikan false; itu memanggil event.preventDefault (); AND event.stopPropagation (); juga!"
Ravindranath Akila
1
Agar teliti, pertanyaan OP tidak pernah menyebutkan preventDefault, pertanyaannya adalah, bagaimana cara "mencegah klik default" .
Linus Kleen
1
@LinusKleen, katakan juga tolong, bagaimana mencegah klik dalam kasus
vp_arth
1
@vp_arth Gunakan "klik CSS" untuk ini. Lihat pertanyaan ini .
Linus Kleen
48

Menurut saya jawabannya salah! Dia bertanya event.preventDefault();kapan Anda membalas salah; itu menyebut event.preventDefault();DAN event.stopPropagation();juga!

Anda bisa mengatasinya dengan ini:

<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();
}
Wawa
sumber
6
Anda mengandalkan window.eventyang tidak selalu tersedia di semua browser.
Linus Kleen
Diedit untuk menambahkan: event = event || window.event;
Nigel Fds
45

Coba ini (tetapi gunakan tombol untuk kasus seperti itu jika Anda tidak memiliki hrefnilai yang valid untuk degradasi yang anggun )

<a href="#" onclick="callmymethod(24); return false;">Call</a>
Aamir Afridi
sumber
1
bagus cukup terbaik. Saya ingin ini sama untuk event.preventDefault ();
Sameer Kazi
Ini berhasil untuk saya, tetapi dapatkah Anda menjelaskan mengapa Anda harus melakukannya return false;? Apa kita bahkan kembali salah?
Kolob Canyon
Anda hanya bisa mengembalikan alih-alih mengembalikan salah, mengembalikannya akan menghindari tautan menavigasi ke href. Secara teknis kita harus menggunakan tombol untuk kasus seperti itu.
Aamir Afridi
12

Anda dapat menangkap acara tersebut dan kemudian memblokirnya dengan preventDefault () - berfungsi dengan Javascript murni

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

Letakkan saja "javascript: void (0)", di tempat "#" di tag href

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

Ini berhasil untuk saya

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

Cara lain untuk melakukannya adalah dengan menggunakan eventobjek di dalam atribut onclick(tanpa perlu menambahkan argumen tambahan ke fungsi untuk melewatkan acara)

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

h3t1
sumber
0

Akan terlalu membosankan untuk mengubah penggunaan fungsi di semua halaman html menjadi return false.

Jadi, berikut adalah solusi teruji yang hanya menambal fungsi itu sendiri:

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

Hal ini dengan benar mencegah IE6, IE11, dan Chrome terbaru untuk mengunjungi href="#"setelah pengendali kejadian onclick selesai.

Kredit:

Vadzim
sumber
0

Jika Anda perlu memasukkannya ke dalam tag. Bukan solusi terbaik, tapi itu akan berhasil.

Pastikan Anda meletakkan acara onclick di depan href. Hanya bekerja untuk saya seperti ini.

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

Berikan kelas atau id ke elemen tersebut dan gunakan fungsi jquery unbind ();

$(".slide_prevent").click(function(){
                $(".slide_prevent").unbind();
              });
pengguna46487
sumber