jQuery 1.9 .live () bukan fungsi


242

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:


509

jQuery .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()!


Baca sebelum Anda mulai melakukan pencarian dan ganti:

Untuk perbaikan cepat / panas di situs langsung, jangan hanya mengganti kata kunci livedengan 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.


Contoh Migrasi 1:

sebelum:

$('#mainmenu a').live('click', function)

setelah itu, Anda memindahkan elemen anak ( a) ke .on()pemilih:

$('#mainmenu').on('click', 'a', function)

Contoh Migrasi 2:

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, bodyselalu berfungsi:

$('body').on('click', '.myButton', function)

Lihat juga:


56

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;
    }
});

3
Harus menyertakan a return this;di akhir fungsi untuk melestarikan kemampuan chaining
Guerilla

Apakah menggunakan ini akan menimbulkan masalah di masa depan?
Islam Elshobokshy

15

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 ()


Terima kasih telah menyebutkan versi yang kompatibel ke depan: .delegate ()
Edward Olamisan

13

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);
          }
      }
  });
}

Ini berfungsi sangat baik untuk kasus saya: harus bekerja wajib pada jQuery 1.11.2. Terima kasih!
vcoppolecchia

5

.live () sudah tidak digunakan lagi dan sekarang telah dihapus dari jQuery 1.9. Anda harus menggunakan .on ()




2

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/


3
Saya pikir sintaks .on () diperlukan hanya untuk konten yang dimuat secara dinamis (misalnya, elemen ditambahkan setelah halaman dimuat).
T30

1

Jika Anda menggunakan permata jQuery Ruby on Rails ' jquery-railsdan karena alasan tertentu Anda tidak dapat memperbaiki kode legacy Anda, versi terakhir yang masih mendukung adalah 2.1.3dan 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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.