Saya punya input type="image"
. Ini bertindak seperti catatan sel di Microsoft Excel. Jika seseorang memasukkan nomor ke dalam kotak teks yang input-image
dipasangkan dengan ini, saya menyiapkan pengendali acara untuk input-image
. Kemudian ketika pengguna mengklik image
, mereka mendapatkan popup kecil untuk menambahkan beberapa catatan ke data.
Masalah saya adalah bahwa ketika pengguna memasukkan nol ke dalam kotak teks, saya harus menonaktifkan input-image
pengendali acara. Saya sudah mencoba yang berikut, tetapi tidak berhasil.
$('#myimage').click(function { return false; });
sumber
unbind()
berfungsi? Saya telah menambahkannya dan kedua acara masih berlangsung.$('#myimage').off('click').on('click',function(){...})
.unbind()
membantu saya dalam situasi di mana saya mengaktifkan banyak kotak centang, tetapi saya sadar saya menambahkan.click()
handler berulang kali, menyebabkan aplikasi hang.Ini tidak tersedia ketika pertanyaan ini dijawab, tetapi Anda juga dapat menggunakan metode live () untuk mengaktifkan / menonaktifkan acara.
Apa yang akan terjadi dengan kode ini adalah ketika Anda mengklik #mydisablebutton, itu akan menambah kelas yang dinonaktifkan pada elemen #myimage. Ini akan membuatnya sehingga pemilih tidak lagi cocok dengan elemen dan acara tidak akan dipecat sampai kelas 'dinonaktifkan' dihapus membuat pemilih .live () valid lagi.
Ini memiliki manfaat lain dengan menambahkan gaya berdasarkan kelas itu juga.
sumber
live()
, tidak pernah berpikir tentang menggunakannya dengan cara ini sebelumnya ... Selain kenyamanan pengkodean, apakah lebih cepat atau apakah itu menawarkan keuntungan lain untuk menggunakan bind / unbind?Jika Anda ingin menanggapi suatu peristiwa hanya satu kali , sintaks berikut ini akan sangat membantu:
Menggunakan arguments.callee , kita dapat memastikan bahwa satu penangan fungsi anonim tertentu dihapus, dan dengan demikian, memiliki penangan waktu tunggal untuk peristiwa tertentu. Semoga ini bisa membantu orang lain.
sumber
Ini dapat dilakukan dengan menggunakan fungsi unbind.
Anda bisa menambahkan beberapa penangan acara ke objek dan acara yang sama di jquery. Ini berarti menambahkan yang baru tidak menggantikan yang lama.
Ada beberapa strategi untuk mengubah penangan acara, seperti ruang nama acara. Ada beberapa halaman tentang ini di dokumen online.
Lihatlah pertanyaan ini (begitulah cara saya belajar tentang ikatan). Ada beberapa deskripsi yang berguna dari strategi ini dalam jawaban.
Cara membaca fungsi callback hover terikat di jquery
sumber
mungkin metode yang tidak mengikat akan bekerja untuk Anda
sumber
Saya harus mengatur acara ke null menggunakan prop dan attr. Saya tidak bisa melakukannya dengan satu atau yang lain. Saya juga tidak bisa mendapatkan .unbind untuk bekerja. Saya sedang mengerjakan elemen TD.
sumber
$("#elementId").click(function(){//Event execution code goes here});
sehingga tidak ada di halaman html sama sekali. Untuk menghapus bahwa kita sebenarnya perlu menggunakan.unbind()
, atau yang disukai.off()
unbind
danoff
dan itu tidak menyelesaikan masalah. Terima kasih banyak!Jika acara dilampirkan dengan cara ini , dan target tidak terikat:
sumber
Anda mungkin menambahkan
onclick
penangan sebagai marka sebaris:Jika demikian, jquery
.off()
atau.unbind()
tidak akan berfungsi. Anda perlu menambahkan event handler asli di jquery juga:Kemudian jquery memiliki referensi ke pengendali event dan dapat menghapusnya:
VoidKing menyebutkan ini sedikit lebih miring dalam komentar di atas.
sumber
Diperbarui untuk 2014
Menggunakan versi terbaru jQuery, Anda sekarang dapat melepaskan ikatan semua peristiwa di namespace hanya dengan melakukan
$( "#foo" ).off( ".myNamespace" );
sumber
Cara terbaik untuk menghapus acara onclick inline adalah
$(element).prop('onclick', null);
sumber
Bagi
remove
SEMUAevent-handlers
, inilah yang berhasil bagi saya:Untuk menghapus semua penangan acara berarti memiliki dataran
HTML structure
tanpa semua yangevent handlers
melekat padaelement
danchild nodes
. Untuk melakukan ini,jQuery's clone()
membantu.Dengan ini, kita akan memiliki
clone
di tempatoriginal
tanpaevent-handlers
di atasnya.Semoga berhasil...
sumber
Terima kasih untuk informasi. sangat membantu saya menggunakannya untuk mengunci interaksi halaman saat dalam mode edit oleh pengguna lain. Saya menggunakannya bersamaan dengan ajaxComplete. Tidak perlu perilaku yang sama tetapi agak mirip.
sumber
.on()
Metode dalam kasus sebelumnya digunakan dengan pemilih tertentu, seperti dalam contoh berikut:Keduanya
unbind()
dan.off()
metode tidak akan berhasil.Namun, metode .undelegate () dapat digunakan untuk sepenuhnya menghapus handler dari acara untuk semua elemen yang cocok dengan pemilih saat ini:
sumber
Jika Anda menggunakan
$(document).on()
untuk menambahkan pendengar ke elemen yang dibuat secara dinamis maka Anda mungkin harus menggunakan yang berikut untuk menghapusnya:sumber
Ini juga berfungsi dengan baik. Sederhana dan mudah. Lihat http://jsfiddle.net/uZc8w/570/
sumber
jika Anda mengatur
onclick
viahtml
Anda perluremoveAttr ($(this).removeAttr('onclick'))
jika Anda mengaturnya melalui jquery (seperti setelah klik pertama dalam contoh saya di atas) maka Anda perlu melakukannya
unbind($(this).unbind('click'))
sumber
Saya tahu ini terlambat, tapi mengapa tidak menggunakan JS biasa untuk menghapus acara?
atau, jika Anda menggunakan fungsi bernama sebagai pengendali event:
sumber
Semua pendekatan yang dijelaskan tidak bekerja untuk saya karena saya menambahkan acara klik
on()
ke dokumen tempat elemen dibuat saat run-time:Solusi saya:
Karena saya tidak dapat melepaskan ikatan kelas ".button", saya hanya menetapkan kelas lain pada tombol yang memiliki gaya CSS yang sama. Dengan melakukan hal itu, live / on-event-handler akhirnya mengabaikan klik:
Semoga itu bisa membantu.
sumber
Semoga kode saya di bawah ini menjelaskan semuanya. HTML:
sumber
})(jQuery);
ke IIFE ketika sudah dapat diakses secara global?Cukup hapus saja dari tombol:
sumber