Câu trả lời:
.live()
đã bị xóa trong phiên bản 1.9 trở đi.Điều đó có nghĩa là nếu bạn đang nâng cấp từ phiên bản 1.8 trở về trước, bạn sẽ thấy mọi thứ bị phá vỡ nếu bạn không làm theo hướng dẫn di chuyển bên dưới. Bạn không chỉ đơn giản là thay thế .live()
bằng .on()
!
Để sửa lỗi nhanh / nóng trên trang web trực tiếp, không chỉ thay thế từ khóa live
bằng on
,
vì các tham số khác nhau !
.live(events, function)
nên ánh xạ tới:
.on(eventType, selector, function)
Bộ chọn (con) là rất quan trọng! Nếu bạn không cần sử dụng nó vì bất kỳ lý do gì, hãy đặt nó thành null
.
trước:
$('#mainmenu a').live('click', function)
sau đó, bạn di chuyển phần tử con ( a
) sang .on()
bộ chọn:
$('#mainmenu').on('click', 'a', function)
trước:
$('.myButton').live('click', function)
sau đó, bạn di chuyển phần tử ( .myButton
) sang .on()
bộ chọn và tìm phần tử cha gần nhất (tốt nhất là có ID):
$('#parentElement').on('click', '.myButton', function)
Nếu bạn không biết phải làm cha mẹ, hãy body
luôn làm việc:
$('body').on('click', '.myButton', function)
Bạn có thể tránh tái cấu trúc mã của mình bằng cách bao gồm mã JavaScript sau
jQuery.fn.extend({
live: function (event, callback) {
if (this.selector) {
jQuery(document).on(event, this.selector, callback);
}
return this;
}
});
Danh mục tài liệu jQuery API live()
như bị phản đối như các phiên bản 1.7 và loại bỏ như các phiên bản 1.9: liên kết .
phiên bản không dùng nữa: 1.7, đã xóa: 1.9
Hơn nữa, nó nói:
Kể từ jQuery 1.7, phương thức .live () không được dùng nữa. Sử dụng .on () để đính kèm các trình xử lý sự kiện. Người dùng các phiên bản cũ hơn của jQuery nên sử dụng .delegate () để ưu tiên cho .live ()
Cổng chuyển tiếp của .live()
jQuery> = 1.9 Tránh tái cấu trúc các phụ thuộc JS trên .live()
Sử dụng bối cảnh bộ chọn DOM được tối ưu hóa
/**
* 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 đã bị xóa trong 1.9, vui lòng xem hướng dẫn nâng cấp: http://jquery.com/upTHER-guide/1.9/#live-remond
Một sửa chữa rất đơn giản mà không cần thay đổi mã của bạn, chỉ cần thêm tập lệnh di chuyển jquery, tải xuống tại đây https://github.com/jquery/jquery-migrate/
Nó cung cấp jquery không dùng nữa nhưng các chức năng cần thiết như "trực tiếp", "trình duyệt", v.v.
Tôi có xu hướng không sử dụng cú pháp .on (), nếu không cần thiết. Ví dụ: bạn có thể di chuyển dễ dàng hơn như thế này:
cũ:
$('.myButton').live('click', function);
Mới:
$('.myButton').click(function)
Dưới đây là danh sách các trình xử lý sự kiện hợp lệ: https://api.jquery.com/carget/forms/
Nếu bạn tình cờ sử dụng đá quý jQuery của Ruby on Rails jquery-rails
và vì một số lý do bạn không thể cấu trúc lại mã kế thừa của mình, phiên bản cuối cùng vẫn hỗ trợ là 2.1.3
và bạn có thể khóa nó bằng cách sử dụng cú pháp sau trên Gemfile
:
gem 'jquery-rails', '~> 2.1', '= 2.1.3'
sau đó bạn có thể sử dụng lệnh sau để cập nhật:
bundle update jquery-rails
Tôi hy vọng rằng sẽ giúp những người khác phải đối mặt với một vấn đề tương tự.
return this;
phần cuối của chức năng để duy trì khả năng xâu chuỗi