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()
?
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:
.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()
!
İçin hızlı / sıcak düzeltmeleri canlı sitede, yok sadece anahtar kelimenin yerini live
ile 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
.
önce:
$('#mainmenu a').live('click', function)
sonra, alt öğeyi ( a
) .on()
seçiciye taşırsınız:
$('#mainmenu').on('click', 'a', function)
ö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, body
her zaman çalışır:
$('body').on('click', '.myButton', function)
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;
}
});
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
.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);
}
}
});
}
.live () kaldırıldı ve şimdi jQuery Sen kullanmalıdır 1.9 kaldırılmıştır ) (.sistem
.live 1.9 sürümünde kaldırıldı, lütfen yükseltme kılavuzuna bakın: http://jquery.com/upgrade-guide/1.9/#live-removed
Kodunuzu değiştirmeniz gerekmeyen çok basit bir düzeltme, sadece jquery taşıma komut dosyası ekleyin, buradan indirin https://github.com/jquery/jquery-migrate/
Jquery kullanımdan kaldırıldı, ancak "canlı", "tarayıcı" vb.
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/
Ruby on Rails'in jQuery gemini kullanıyorsanız jquery-rails
ve 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.
return this;
Zincirleme yeteneğini korumak için fonksiyonun sonunda a