Saya baru saja memperbarui jQuery dari 1,8 menjadi 2,1. Tiba-tiba saya menemukan bahwa .live()
berhenti berfungsi.
Saya mendapatkan kesalahan TypeError: $(...).live is not a function
.
Apakah ada metode yang dapat saya gunakan .live()
?
Saya baru saja memperbarui jQuery dari 1,8 menjadi 2,1. Tiba-tiba saya menemukan bahwa .live()
berhenti berfungsi.
Saya mendapatkan kesalahan TypeError: $(...).live is not a function
.
Apakah ada metode yang dapat saya gunakan .live()
?
Jawaban:
.live()
telah dihapus dalam versi 1.9 dan seterusnya.Itu berarti jika Anda meningkatkan dari versi 1.8 dan sebelumnya, Anda akan melihat banyak hal yang melanggar jika Anda tidak mengikuti panduan migrasi di bawah ini. Anda tidak boleh hanya mengganti .live()
dengan .on()
!
Untuk perbaikan cepat / panas di situs langsung, jangan hanya mengganti kata kunci live
dengan on
,
karena parameternya berbeda !
.live(events, function)
harus dipetakan ke:
.on(eventType, selector, function)
Pemilih (anak) sangat penting! Jika Anda tidak perlu menggunakan ini untuk alasan apa pun, setel ke null
.
sebelum:
$('#mainmenu a').live('click', function)
setelah itu, Anda memindahkan elemen anak ( a
) ke .on()
pemilih:
$('#mainmenu').on('click', 'a', function)
sebelum:
$('.myButton').live('click', function)
setelah itu, Anda memindahkan elemen ( .myButton
) ke .on()
pemilih, dan menemukan elemen induk terdekat (lebih disukai dengan ID):
$('#parentElement').on('click', '.myButton', function)
Jika Anda tidak tahu apa yang harus dimasukkan sebagai orang tua, body
selalu berfungsi:
$('body').on('click', '.myButton', function)
Anda dapat menghindari refactoring kode Anda dengan memasukkan kode JavaScript berikut
jQuery.fn.extend({
live: function (event, callback) {
if (this.selector) {
jQuery(document).on(event, this.selector, callback);
}
return this;
}
});
Dokumentasi jQuery API mencantumkan tautanlive()
usang versi 1.7 dan dihapus pada tautan versi 1.9 : .
versi usang: 1.7, dihapus: 1.9
Lebih lanjut dikatakan:
Pada jQuery 1.7, metode .live () sudah tidak digunakan lagi. Gunakan .on () untuk melampirkan penangan acara. Pengguna versi jQuery yang lebih lama harus menggunakan .delegate () untuk preferensi .live ()
Port .live()
penerusan untuk jQuery> = 1.9. Menghindari ketergantungan JS kembali pada .live()
konteks Pemilih DOM yang dioptimalkan
/**
* Forward port jQuery.live()
* Wrapper for newer jQuery.on()
* Uses optimized selector context
* Only add if live() not already existing.
*/
if (typeof jQuery.fn.live == 'undefined' || !(jQuery.isFunction(jQuery.fn.live))) {
jQuery.fn.extend({
live: function (event, callback) {
if (this.selector) {
jQuery(document).on(event, this.selector, callback);
}
}
});
}
.live dihapus pada 1.9, silakan lihat panduan peningkatan: http://jquery.com/upgrade-guide/1.9/#live-removed
Perbaikan sangat sederhana yang tidak perlu mengubah kode Anda, cukup tambahkan skrip migrasi jquery, unduh di sini https://github.com/jquery/jquery-migrate/
Ini memasok jquery usang tetapi membutuhkan fungsi seperti "live", "browser" dll
Saya cenderung tidak menggunakan sintaks .on (), jika tidak perlu. Misalnya, Anda dapat bermigrasi dengan lebih mudah seperti ini:
tua:
$('.myButton').live('click', function);
baru:
$('.myButton').click(function)
Berikut adalah daftar penangan acara yang valid: https://api.jquery.com/category/forms/
Jika Anda menggunakan permata jQuery Ruby on Rails ' jquery-rails
dan karena alasan tertentu Anda tidak dapat memperbaiki kode legacy Anda, versi terakhir yang masih mendukung adalah 2.1.3
dan Anda dapat menguncinya dengan menggunakan sintaks berikut pada Anda Gemfile
:
gem 'jquery-rails', '~> 2.1', '= 2.1.3'
maka Anda dapat menggunakan perintah berikut untuk memperbarui:
bundle update jquery-rails
Saya harap itu membantu orang lain menghadapi masalah serupa.
return this;
di akhir fungsi untuk melestarikan kemampuan chaining