2013-01-31 25 views
9

Tôi đã sử dụng jQuery live() chức năng để phát hiện khi người dùng đã nhấn một số phím đặc biệt (mũi tên, vv):Jquery chức năng sống đột nhiên không làm việc nữa

$('.TextBox1').live('keydown', function(e) { 
    var keyCode = e.keyCode || e.which; 
    if (keyCode == 40) { 
     e.preventDefault(); 
     // ... 
    } 
}); 

Nó đã làm việc tốt cho một vài tháng khi đột nhiên ngày hôm qua nó ngừng hoạt động, ngăn chặn mọi dòng mã JS bên dưới nó thực thi. Tôi đã cố gắng thay thế nó bằng chức năng .keyup nhưng điều này không giúp được gì. Những gì có thể đã xảy ra?

+0

bạn có gặp bất kỳ lỗi nào trong bảng điều khiển không? –

+3

Có điều gì khác xảy ra hôm qua không? Tôi cá là nó đã làm. – Jon

+3

[live()] (http://api.jquery.com/live/) không được dùng nữa kể từ jQuery 1.7 và đã bị xóa trong 1.9. Sử dụng [on()] (http://api.jquery.com/on/) để thay thế. –

Trả lời

26

Tôi cho rằng bạn đã cập nhật lên phiên bản mới nhất của jQuery? live() đã không được chấp nhận kể từ jQ1.7 và hiện bị xóa là 1.9.

Thay vào đó, bạn nên sử dụng on() với một tham số đại biểu:

$(document).on('keydown', '.TextBox1', function(e) { 
    var keyCode = e.keyCode || e.which; 

    if (keyCode == 40) { 
     e.preventDefault(); 
     //... 
    } 
}); 

Lưu ý rằng cho hiệu suất tốt nhất bạn nên thay thế document trong ví dụ trên với các yếu tố phụ huynh gần nhất của .TextBox1 mà không tự động nối vào DOM sau khi tải trang.

+4

Nhận được 7 câu trả lời 'gần như giống nhau', tôi chọn đây là câu trả lời đúng vì đây là câu trả lời đầu tiên. –

1

.live đã bị xóa trong jQuery 1.9. Nếu bạn đang gọi phiên bản mới nhất của jQuery nó sẽ phá vỡ.

Thay đổi mã của bạn để sử dụng .on

0

Kể từ jQuery 1.7, phương thức .live() không được chấp nhận. Sử dụng .on() để đính kèm 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() trong tùy chọn .live().

Đọc thông tin này để biết thêm thông tin về live

3

jQuery .live không được dùng nữa. Mặc dù không hoàn toàn giống nhau, sử dụng .Trên() Ví dụ của bạn nó sẽ như thế nào:

$('body').on('keydown', '.TextBox1', function() { 
    var keyCode = e.keyCode || e.which; 
    if (keyCode == 40) { 
     e.preventDefault(); 
     ... 
    } 
} 
0

sống đã thực sự được gỡ bỏ trên JQ 1.9, không chỉ bị phản đối! bạn có thể sử dụng plugin để tương thích hoặc cập nhật mã của mình lên trên

2

.live() đã bị xóa trong phiên bản mới nhất của jQuery 1.9.

Thay vào đó, bạn có thể sử dụng jQuery Migrate plugin hoặc thay đổi mã để sử dụng .on.

0

.live() bị phản đối trong JQ 1.9, do đó bạn có thể thử này

$('.TextBox1').on('keydown', function() { 
    var keyCode = e.keyCode || e.which; 
    if (keyCode == 40) { 
     e.preventDefault(); 
     ... 
    } 
} 
+0

Cảm ơn câu trả lời, tôi đoán tôi là người duy nhất không biết về nó. XD –

0

Bạn đã cập nhật jquery 1,7?

Kể từ jQuery 1.7, phương thức .live() không được chấp nhận.

Sử dụng .Trên() để đính kèm xử lý sự kiện:

$('.TextBox1').on('keydown', text_box_key_down_function); 

Bạn cũng có thể sử dụng ràng buộc:

$('.TextBox1').bind('keydown',text_box_key_down_function); 
0

.live đã được gỡ bỏ khi JQ 1.9 đã được phát hành, vì vậy tôi đoán bạn đã được cập nhật Jquery đến mới nhất.

Bây giờ, hãy thử:

$('.TextBox1').on('keydown', function() { 
    var keyCode = e.keyCode || e.which; 
    if (keyCode == 40) { 
     e.preventDefault(); 
     ... 
    } 
} 
3

.live() đã được gỡ bỏ sau khi jQuery 1.9.

Bạn phải sử dụng .on từ bây giờ trở đi.

0

sử dụng điều này như được đề cập trên trang web jquery. ví dụ của bạn nó sẽ được

$(document).on("keydown", ".TextBox1", function() { });

0

.live đã được gỡ bỏ khi JQ 1.9 nhưng bây giờ có là giải pháp cho chạy cả .live và .Trên cùng lúc

<script src="http://code.jquery.com/jquery-1.9.1.js"></script> 
<script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script> 
<script src="http://code.jquery.com/jquery-1.11.1.js"></script> 

More about Jquery migrate

Feather information from stackoverflow

Các vấn đề liên quan