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
}

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

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

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>

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

11

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

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

10

Ini berhasil untuk saya

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


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>


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:


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>

-3

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

$(".slide_prevent").click(function(){
                $(".slide_prevent").unbind();
              });
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.