jQuery 1.9 .live () bir işlev değildir


242

Yakın zamanda jQuery'i 1.8'den 2.1'e güncelledim. Aniden .live()durmaların durduğunu keşfettim .
Hatayı alıyorum TypeError: $(...).live is not a function.

Bunun yerine kullanabileceğim bir yöntem var mı .live()?

Yanıtlar:


509

jQuery .live(), 1.9 sürümünden sonra kaldırılmıştır.

Bu, sürüm 1.8 ve önceki sürümlerden yükseltme yapıyorsanız, aşağıdaki taşıma kılavuzunu izlemezseniz bazı şeylerin kırıldığını fark edeceğiniz anlamına gelir. Sadece yerine .live()koymamalısınız .on()!


Arama yapmaya başlamadan önce okuyun ve değiştirin:

İçin hızlı / sıcak düzeltmeleri canlı sitede, yok sadece anahtar kelimenin yerini liveile on,
yanı parametreleri farklıdır !

.live(events, function)

şununla eşleşmelidir:

.on(eventType, selector, function)

(Çocuk) seçici çok önemlidir! Bunu herhangi bir nedenle kullanmanız gerekmiyorsa, olarak ayarlayın null.


Göç Örneği 1:

önce:

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

sonra, alt öğeyi ( a) .on()seçiciye taşırsınız:

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

Göç Örneği 2:

önce:

$('.myButton').live('click', function)

sonra, öğeyi ( .myButton) .on()seçiciye taşır ve en yakın üst öğeyi (tercihen bir kimlikle) bulursunuz:

$('#parentElement').on('click', '.myButton', function)

Ebeveyn olarak ne koyacağınızı bilmiyorsanız, bodyher zaman çalışır:

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

Ayrıca bakınız:


56

Aşağıdaki JavaScript kodunu ekleyerek kodunuzu yeniden düzenlemekten kaçınabilirsiniz

jQuery.fn.extend({
    live: function (event, callback) {
       if (this.selector) {
            jQuery(document).on(event, this.selector, callback);
        }
        return this;
    }
});

3
return this;Zincirleme yeteneğini korumak için fonksiyonun sonunda a
Guerilla

Bunu kullanmak gelecekte herhangi bir soruna neden olur mu?
İslam Elshobokshy

15

JQuery API belgeleri listeleri live(): sürüm 1.7 olarak kaldırılmış ve sürüm 1.9 itibariyle kaldırıldı renkli .

sürüm kullanımdan kaldırıldı: 1.7, kaldırıldı: 1.9

Ayrıca şunları ifade eder:

JQuery 1.7 itibariyle .live () yöntemi kullanımdan kaldırılmıştır. Olay işleyicileri eklemek için .on () kullanın . JQuery'nin eski sürümlerinin kullanıcıları .live () yerine .delegate () kullanmalıdır


İleri uyumlu sürümü belirttiğiniz için teşekkür ederiz: .delegate ()
Edward Olamisan

13

.live()JQuery için ileri bağlantı noktası > = 1.9 JS bağımlılıklarının yeniden yapılandırılmasını önler .live() Optimize edilmiş DOM seçici bağlamını kullanır

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

Bu benim durumum için çok iyi çalıştı: jQuery 1.11.2 üzerinde zorunlu olarak çalışması lazım. Teşekkür ederim!
vcoppolecchia




2

Gerekmiyorsa .on () sözdizimini kullanmama eğilimindeyim. Örneğin şu şekilde daha kolay geçiş yapabilirsiniz:

eski:

$('.myButton').live('click', function);

yeni:

$('.myButton').click(function)

Geçerli olay işleyicilerinin listesi: https://api.jquery.com/category/forms/


3
.On () sözdiziminin yalnızca dinamik olarak yüklenen içerik için gerekli olduğunu düşünüyorum (örneğin, sayfa yüklendikten sonra eklenen öğeler).
T30

1

Ruby on Rails'in jQuery gemini kullanıyorsanız jquery-railsve herhangi bir nedenle eski kodunuzu yeniden düzenleyemiyorsanız, hala destekleyen son sürüm 2.1.3, aşağıdaki sözdizimini kullanarak kilitleyebilirsiniz Gemfile:

gem 'jquery-rails', '~> 2.1', '= 2.1.3'

güncellemek için aşağıdaki komutu kullanabilirsiniz:

bundle update jquery-rails

Umarım benzer bir sorunla karşılaşanlara yardım eder.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.