Bagaimana Anda mendapatkan tombol mouse yang diklik menggunakan jQuery?
$('div').bind('click', function(){
alert('clicked');
});
ini dipicu oleh klik kanan dan kiri, bagaimana cara menangkap klik kanan mouse? Saya akan senang jika sesuatu seperti di bawah ini ada:
$('div').bind('rightclick', function(){
alert('right mouse button is pressed');
});
contextmenu
adalah asli browser. dalam JavaScript asli Anda dapat melampirkan keoncontextmenu
acara tersebut.Sunting : Saya mengubahnya agar berfungsi untuk elemen yang ditambahkan secara dinamis menggunakan
.on()
di jQuery 1.7 atau lebih tinggi:Demo: jsfiddle.net/Kn9s7/5
[Mulai posting asli] Inilah yang bekerja untuk saya:
Jika Anda tertarik pada banyak solusi ^^
Sunting : Tim Down memunculkan poin yang baik bahwa itu tidak selalu akan menjadi peristiwa
right-click
yang memicucontextmenu
, tetapi juga ketika tombol menu konteks ditekan (yang bisa dibilang pengganti untuk aright-click
)sumber
contextmenu
peristiwa penembakan tidak selalu menyiratkan bahwa tombol mouse kanan diklik. Pendekatan yang benar adalah mendapatkan informasi tombol dari acara mouse (click
dalam hal ini).Anda dapat dengan mudah mengetahui tombol mouse mana yang ditekan dengan memeriksa
which
properti objek acara pada peristiwa mouse:sumber
e.button==2
sebaliknya.event.button
lintas browser lebih merupakan masalah daripadaevent.which
angka yang digunakan untuk berbagai tombolevent.button
. Lihatlah artikel ini dari Januari 2009 - unixpapa.com/js/mouse.htmlmouseup
untuk memverifikasi seseorang benar-benar mengklik item? Ada banyak waktu jika saya tidak sengaja mengklik sesuatu, saya dapat mencegah klik dengan menahan tombol mouse dan menyeret keluar elemen.mouseup
mungkin adalah acara yang lebih baik, ini hanya contoh dari penggunaanevent.which
klik tombol mouseAnda juga dapat
bind
kecontextmenu
danreturn false
:Demo: http://jsfiddle.net/maniator/WS9S2/
Atau Anda dapat membuat plugin cepat yang melakukan hal yang sama:
Demo: http://jsfiddle.net/maniator/WS9S2/2/
Menggunakan
.on(...)
jQuery> = 1.7:Demo: http://jsfiddle.net/maniator/WS9S2/283/
sumber
method.call(this, e);
bukan denganmethod();
cara itu,method
mendapatkan nilai yang benar untukthis
dan juga memiliki objek acara diteruskan dengan benar.Perbarui keadaan saat ini:
sumber
event.which
telah diperkenalkan yang menghilangkan kompatibilitas lintas browser.http://jsfiddle.net/SRX3y/8/
sumber
Ada banyak jawaban yang sangat bagus, tetapi saya hanya ingin menyentuh satu perbedaan utama antara IE9 dan IE <9 saat menggunakan
event.button
.Menurut spesifikasi Microsoft lama untuk
event.button
kode berbeda dari yang digunakan oleh W3C. W3C hanya mempertimbangkan 3 kasus:event.button === 1
event.button === 3
event.button === 2
Dalam Internet Explorer yang lebih lama namun Microsoft sedikit membalik untuk tombol yang ditekan dan ada 8 kasus:
event.button === 0
atau 000event.button === 1
atau 001event.button === 2
atau 010event.button === 3
atau 011event.button === 4
atau 100event.button === 5
atau 101event.button === 6
atau 110event.button === 7
atau 111Terlepas dari kenyataan bahwa ini secara teoritis bagaimana seharusnya bekerja, tidak ada Internet Explorer yang pernah mendukung kasus dua atau tiga tombol yang ditekan secara bersamaan. Saya menyebutkannya karena standar W3C bahkan tidak dapat secara teoritis mendukung ini.
sumber
event.button === 0
yang tidak diklik, brilian IEಠ_ಠ
Sepertinya saya sedikit adaptasi dari jawaban TheVillageIdiot akan lebih bersih:
EDIT: JQuery memberikan
e.which
atribut, masing-masing mengembalikan 1, 2, 3 untuk klik kiri, tengah, dan kanan. Jadi bisa juga Anda gunakanif (e.which == 3) { alert("right click"); }
Lihat juga: jawaban untuk "Memicu acara klik menggunakan klik tengah"
sumber
event.which === 1
memastikan itu klik kiri (saat menggunakan jQuery).Tetapi Anda juga harus memikirkan kunci pengubah: ctrlcmdshiftalt
Jika Anda hanya tertarik untuk menangkap klik kiri yang sederhana dan tidak dimodifikasi, Anda dapat melakukan sesuatu seperti ini:
sumber
Jika Anda mencari "Acara Mouse Javascript Lebih Baik" yang memungkinkan
Lihat javascript normal peramban silang ini yang memicu peristiwa di atas, dan menghilangkan pekerjaan sakit kepala. Cukup salin dan tempel ke bagian atas skrip Anda, atau sertakan dalam file di dalam
<head>
dokumen Anda. Kemudian ikat acara Anda, lihat blok kode berikut di bawah ini yang menunjukkan contoh jquery menangkap peristiwa dan menjalankan fungsi yang ditugaskan untuk mereka, meskipun ini bekerja dengan javascript mengikat normal juga.Jika Anda tertarik melihatnya berfungsi, lihat jsFiddle: https://jsfiddle.net/BNefn/
Contoh Acara Klik Mouse yang Lebih Baik (menggunakan jquery untuk kesederhanaan, tetapi di atas akan bekerja lintas browser dan mem-api nama acara yang sama, IE menggunakan sebelum nama-nama)
Dan bagi mereka yang membutuhkan versi yang diperkecil ...
sumber
sumber
sumber
Dengan jquery bisa Anda gunakan
event object type
sumber
ada juga cara, untuk melakukannya tanpa JQuery!
Lihat ini:
sumber
sumber
Bagi mereka yang bertanya-tanya apakah mereka harus menggunakan atau tidak
event.which
dalam vanilla JS atau Angular : Sekarang sudah usang jadi lebih suka menggunakanevent.buttons
sebagai gantinya.Catatan: Dengan metode ini dan acara (mousedown) :
dan acara (mouseup) TIDAK akan mengembalikan angka yang sama tetapi 0 sebagai gantinya.
Sumber: https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons
sumber
sumber