Saya memiliki satu tombol di li dengan id "my_id"
. Saya melampirkan dua acara jQuery dengan elemen ini
1.
$("#my_id").click(function() {
alert('single click');
});
2.
$("#my_id").dblclick(function() {
alert('double click');
});
Tapi setiap kali itu memberi saya single click
javascript
jquery
jquery-events
pengguna426795
sumber
sumber
Jawaban:
Anda perlu menggunakan waktu tunggu untuk memeriksa apakah ada klik lain setelah klik pertama.
Inilah triknya :
Pemakaian:
EDIT:
Seperti yang dinyatakan di bawah, lebih suka menggunakan
dblclick
acara asli : http://www.quirksmode.org/dom/events/click.htmlAtau yang disediakan oleh jQuery: http://api.jquery.com/dblclick/
sumber
dblclick
acaradblclick
pasti cara untuk pergi hari ini. jQuery juga menangani acara ini: api.jquery.com/dblclickevent.detail
tersedia, ini adalah cara terbaik untuk mendeteksi klik dua kali dari handler klik. Lihat jawaban ini .Perilaku
dblclick
acara dijelaskan di Quirksmode .Urutan acara untuk
dblclick
adalah:Satu-satunya pengecualian untuk aturan ini adalah (tentu saja) Internet Explorer dengan urutan kustomnya:
Seperti yang Anda lihat, mendengarkan kedua peristiwa secara bersamaan di elemen yang sama akan menghasilkan panggilan tambahan ke
click
penangan Anda .sumber
dblclick
bahkan tidak yakin dapat diandalkan ... jika saya klik sekali ... tunggu satu atau dua detik, lalu klik lagi, saya mendapatkandblclick
acara di klik kedua!event.detail
tersedia, ini adalah cara terbaik untuk mendeteksi klik dua kali dari handler klik. Lihat jawaban ini .Alih-alih memanfaatkan lebih banyak status ad-hoc dan setTimeout, ternyata ada properti asli bernama
detail
yang bisa Anda akses darievent
objek tersebut!Browser modern dan bahkan IE-9 mendukungnya :)
Sumber: https://developer.mozilla.org/en-US/docs/Web/API/UIEvent/detail
sumber
event.detail === 1
) masih akan terpicu. Lihat biola saya atau komentar ini di utas ini .if(evt.detail !== 1) return;
menolak penggandaan yang tidak disengaja klik akan memblokir akses ke tombol itu untuk pengguna tanpa mouse.Fungsi sederhana. Tidak ada jquery atau framework lain yang dibutuhkan. Teruskan fungsi Anda sebagai parameter
sumber
el.dataset.dblclick
akan menjadi cara yang lebih baik untuk melakukan ini sekarang.event.detail
tersedia, ini adalah cara terbaik untuk mendeteksi klik dua kali dari handler klik. Lihat jawaban ini .Saya khawatir perilakunya bergantung pada browser:
http://api.jquery.com/dblclick/
Menjalankan kode Anda di Firefox, alert () di
click()
handler mencegah Anda mengklik untuk kedua kalinya. Jika Anda menghapus peringatan tersebut, Anda mendapatkan kedua peristiwa tersebut.sumber
event.detail
tersedia, ini adalah cara terbaik untuk mendeteksi klik dua kali dari handler klik. Lihat jawaban ini .Nah untuk bisa double click (klik dua kali) kamu harus klik dulu sekali. The
click()
kebakaran handler pada klik pertama Anda, dan karena peringatan muncul, Anda tidak memiliki kesempatan untuk membuat klik kedua untuk memecatdblclick()
handler.Ubah penangan Anda untuk melakukan sesuatu selain
alert()
dan Anda akan melihat perilakunya. (mungkin mengubah warna latar belakang elemen):sumber
Jawaban ini dibuat usang seiring waktu, periksa solusi @ kyw.
Saya membuat solusi yang terinspirasi oleh inti yang diposting oleh @AdrienSchuler. Gunakan solusi ini hanya jika Anda ingin mengikat satu klik DAN klik dua kali ke elemen. Kalau tidak, saya sarankan menggunakan yang asli
click
dandblclick
pendengar.Inilah perbedaannya:
setTimeout
untuk menangani click atau doubleclick handlerJavascript:
Pemakaian:
Di bawah ini adalah penggunaan di jsfiddle, tombol jQuery adalah perilaku dari jawaban yang diterima.
jsfiddle.dll
sumber
Solusi Vanilla sederhana lainnya berdasarkan jawaban A1rPun (lihat biolanya untuk solusi jQuery, dan keduanya ada dalam yang ini ).
Tampaknya untuk TIDAK memicu penangan klik-tunggal saat pengguna mengklik dua kali, penangan klik-tunggal harus dipicu setelah penundaan ...
sumber
event.detail
tersedia, ini adalah cara terbaik untuk mendeteksi klik dua kali dari handler klik. Lihat jawaban ini .Berikut adalah alternatif kode jeum untuk jumlah kejadian yang berubah-ubah:
Membutuhkan ini untuk aplikasi cytoscape.js .
sumber
this
, yang merupakan elemen yang diklik, dan meneruskannya ke penangan (di sampinge
atau sebagai gantinya).Bagaimana cara membedakan antara klik tunggal dan klik ganda pada satu elemen yang sama?
Jika Anda tidak perlu mencampurnya, Anda dapat mengandalkan
click
dandblclick
dan masing-masing akan melakukan pekerjaan dengan baik.Masalah muncul saat mencoba mencampurnya: suatu
dblclick
peristiwa sebenarnya akan memicu suatuclick
peristiwa juga , sehingga Anda perlu untuk menentukan apakah satu klik adalah "berdiri sendiri" satu klik, atau bagian dari klik dua kali.Selain itu: Anda tidak boleh menggunakan keduanya
click
dandblclick
pada satu elemen yang sama :Sekarang kabar baiknya:
Anda dapat menggunakan
detail
properti acara untuk mendeteksi jumlah klik yang terkait dengan acara tersebut. Ini membuat klik dua kali di dalamclick
cukup mudah untuk dideteksi.Masalahnya tetap mendeteksi klik tunggal dan apakah itu bagian dari klik ganda atau bukan. Untuk itu, kami kembali menggunakan timer dan
setTimeout
.Membungkus semuanya, dengan menggunakan atribut data (untuk menghindari variabel global) dan tanpa perlu menghitung klik sendiri, kita mendapatkan:
HTML:
JavaScript:
Demo:
JSfiddle
Catatan tentang aksesibilitas dan kecepatan klik dua kali:
Butuh beberapa saat untuk menemukan solusi yang memuaskan, saya harap ini membantu!
sumber
Gunakan plugin jQuery Sparkle yang luar biasa. Plugin memberi Anda opsi untuk mendeteksi klik pertama dan terakhir. Anda dapat menggunakannya untuk membedakan antara klik dan dblclick dengan mendeteksi apakah klik lain diikuti oleh klik pertama.
Lihat di http://balupton.com/sandbox/jquery-sparkle/demo/
sumber
Saya menulis plugin jQuery sederhana yang memungkinkan Anda menggunakan acara 'singleclick' khusus untuk membedakan satu klik dari klik dua kali:
https://github.com/omriyariv/jquery-singleclick
sumber
Jawaban modern yang benar adalah campuran antara jawaban yang diterima dan solusi @kyw. Anda memerlukan waktu tunggu untuk mencegah klik tunggal pertama dan
event.detail
pemeriksaan untuk mencegah klik kedua.sumber
Saya suka menghindari jquery (dan 90-140k libs lainnya), dan seperti yang dicatat browser menangani onclick terlebih dahulu, jadi inilah yang saya lakukan di situs web yang saya buat (contoh ini juga mencakup mendapatkan lokasi yang diklik xy lokal)
semoga membantu
sumber
Berdasarkan jawaban Adrien Schuler (terima kasih banyak !!!), untuk Datatables.net dan untuk banyak kegunaan, berikut ini modifikasinya:
Fungsi
Menggunakan
sumber
ini berhasil untuk saya–
pemakaian-
sumber
Hanya posting jawaban HTML asli kalau-kalau perlu mudah dan HTML.
Ini tentu saja memiliki opsi Jquery asli. yaitu ...
$('#id').attr('ondblclick',function(){...})
atau, seperti yang dinyatakan sebelumnya,$('#id').dblclick(function(){...});
sumber
Saya tahu ini sudah tua, tetapi di bawah ini adalah hanya contoh JS dari penghitung loop dasar dengan timer tunggal untuk menentukan klik tunggal vs ganda. Semoga ini membantu seseorang.
sumber