Saya menemukan dua artikel hebat yang berbicara tentang fungsi baru .on()
: jquery4u.com , elijahmanor.com .
Apakah ada cara di mana .bind()
masih lebih baik untuk digunakan daripada .on()
?
Misalnya, saya memiliki kode contoh yang terlihat seperti ini:
$("#container").click( function( e ) {} )
Anda dapat mencatat bahwa saya hanya memiliki satu item yang diambil oleh pemilih dan dalam kasus saya, <div>
namanya #container
sudah ada ketika halaman saya dimuat; tidak ditambahkan secara dinamis. Sangat penting untuk menyebutkan bahwa saya menggunakan versi terbaru dari jQuery: 1.7.2.
Untuk sampel itu, haruskah .on()
digunakan, .bind()
bahkan jika saya tidak menggunakan fitur lain yang disediakan oleh .on()
fungsi?
javascript
jquery
jquery-selectors
Samuel
sumber
sumber
.bind()
buruknya untuk mengikat beberapa elemen, tetapi gagal menyebutkan bagaimana.on()
ketika digunakan dalam mode mengikat melakukan hal yang persis sama.Jawaban:
Secara internal,
.bind
peta langsung ke.on
dalam versi jQuery saat ini. (Hal yang sama berlaku untuk.live
.) Jadi ada kinerja kecil tapi praktis tidak signifikan jika Anda menggunakannya.bind
.Namun,
.bind
dapat dihapus dari versi mendatang kapan saja. Tidak ada alasan untuk terus menggunakan.bind
dan.on
sebagai gantinya setiap alasan memilih .sumber
.bind
dan.on
identik untuk acara yang tidak didelegasikan;.bind
tidak menyediakan segala jenis jalan pintas seperti$.getJSON
halnyaCuplikan ini semuanya melakukan hal yang persis sama:
Namun, mereka sangat berbeda dari ini, yang semuanya melakukan hal yang sama:
Set kedua penangan acara menggunakan delegasi acara dan akan bekerja untuk elemen yang ditambahkan secara dinamis. Penangan acara yang menggunakan delegasi juga jauh lebih hebat. Set pertama tidak akan berfungsi untuk elemen yang ditambahkan secara dinamis, dan jauh lebih buruk untuk kinerja.
on()
Fungsi jQuery tidak memperkenalkan fungsionalitas baru yang belum ada, itu hanya upaya untuk membakukan penanganan peristiwa di jQuery (Anda tidak lagi harus memutuskan antara langsung, mengikat, atau mendelegasikan).sumber
$('selector').live('click', function () { ... });
Anda agar Anda menjaga hasilnya identik.Metode langsung dan
.delegate
API unggul untuk.on
dan tidak ada niat mencela mereka.Metode langsung lebih disukai karena kode Anda akan diketik dengan kurang ketat. Anda akan mendapatkan kesalahan langsung ketika Anda salah ketik nama acara daripada bug diam. Menurut pendapat saya, juga lebih mudah untuk menulis dan membaca
click
daripadaon("click"
Ini
.delegate
lebih unggul daripada.on
karena urutan argumen:Anda langsung tahu itu didelegasikan karena, well, katanya delegasi. Anda juga langsung melihat pemilih.
Dengan
.on
itu tidak segera jelas apakah itu bahkan didelegasikan dan Anda harus melihat pada akhirnya untuk pemilih:Sekarang, penamaannya
.bind
benar-benar mengerikan dan nilainya lebih buruk daripada.on
. Tetapi.delegate
tidak dapat melakukan acara yang tidak didelegasikan dan ada acara yang tidak memiliki metode langsung, jadi dalam kasus yang jarang seperti ini dapat digunakan tetapi hanya karena Anda ingin membuat pemisahan yang bersih antara acara yang didelegasikan dan yang tidak didelegasikan.sumber
Jika Anda melihat dalam kode sumber untuk
$.fn.bind
Anda akan menemukan bahwa itu hanya fungsi menulis ulang untukon
:http://james.padolsey.com/jquery/#v=1.7.2&fn=$.fn.bind
sumber
Dari dokumentasi jQuery:
http://api.jquery.com/bind/
sumber
Pada Jquery 3.0 dan di atas .bind telah ditinggalkan dan mereka lebih suka menggunakan .on sebagai gantinya. Seperti @Blazemonger menjawab sebelumnya bahwa itu mungkin dihapus dan pasti akan dihapus. Untuk versi yang lebih lama .bind juga akan memanggil .on secara internal dan tidak ada perbedaan di antara mereka. Silakan juga melihat api untuk lebih detail.
Dokumentasi jQuery API untuk .bind ()
sumber