jquery sống lơ lửng


161

Tôi đang sử dụng mã jquery sau đây để chỉ hiển thị nút xóa theo ngữ cảnh cho các hàng trong bảng mà chúng tôi đang di chuột bằng chuột. Điều này hoạt động nhưng không phải cho các hàng đã được thêm bằng js / ajax khi đang bay ...

Có cách nào để làm cho công việc này với các sự kiện trực tiếp?

$("table tr").hover(
  function () {},
  function () {}
);

Câu trả lời:


245

jQuery 1.4.1 hiện hỗ trợ "hover" cho các sự kiện live (), nhưng chỉ với một hàm xử lý sự kiện:

$("table tr").live("hover",

function () {

});

Ngoài ra, bạn có thể cung cấp hai chức năng, một cho mouseenter và một cho mouseleave:

$("table tr").live({
    mouseenter: function () {

    },
    mouseleave: function () {

    }
});

Nó vẫn không làm việc cho tôi mặc dù. Tôi đã thử làm điều này: Tôi đang đi sai ở đâu? > $ ('bảng tr'). live ('hover', function () {$ (this) .find ('. deletebutton'). toggle ();});
Shripad Krishna

1
Điều này không chính xác và không hoạt động. xem tiêu đề "Nhiều sự kiện" trong tài liệu cho live: api.jquery.com/live
Jason

34
Kể từ jQuery 1.4.2, .live ("hover") tương đương với .live ("mouseover mouseout"), KHÔNG .live ("mouseenter mouseleave") - xem bug.jquery.com/ticket/6077 Vì vậy, hãy làm. live ("mouseenter mouseleave", function () {...}) hoặc .live ("mouseenter", function () {...}). live ("mouseleave", function () {...})
AEM

2
cảm ơn bạn @aem, điều này đã làm việc cho tôi: $ ("bảng tr"). live ("mouseenter", function () {...}). live ("mouseleave", function () {...});
jackocnr

3
Theo trang tài liệu JQuery,.live nó nói sẽ sử dụng .onthay thế. "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."
johnt doanh nhân

110
$('.hoverme').live('mouseover mouseout', function(event) {
  if (event.type == 'mouseover') {
    // do something on mouseover
  } else {
    // do something on mouseout
  }
});

http://api.jquery.com/live/


Làm việc cho tôi là tốt. +1 Đã thử làm phiên bản của Philippe, cả với mouseover và mouseenter - đều không hoạt động. Nhưng điều này đã làm. Cảm ơn!
eduncan911

.livebây giờ không được chấp nhận, hãy xem câu trả lời của Andre cho phương pháp thay thế ngay bây giờ.
johnt doanh nhân

1
Việc sử dụng mouseovermouseoutcác sự kiện ở đây sẽ khiến mã liên tục kích hoạt khi người dùng di chuyển chuột xung quanh bên trong phần tử. Tôi nghĩ mouseentermouseleavethích hợp hơn vì nó sẽ chỉ bắn một lần khi vào.
johnt doanh nhân

60

.live() đã bị phản đối kể từ jQuery 1.7

Sử dụng .on()thay thế và chỉ định bộ chọn hậu duệ

http://api.jquery.com/on/

$("table").on({
  mouseenter: function(){
    $(this).addClass("inside");
  },
  mouseleave: function(){
    $(this).removeClass("inside");
  }
}, "tr");  // descendant selector

6
điều này hoạt động hoàn hảo như của jquery 1.9. tất cả các giải pháp trực tiếp và đại biểu đều TIẾP CẬN! sẽ thật tuyệt vời nếu ai đó có thể không chấp nhận câu trả lời được chấp nhận và thay vào đó chấp nhận câu trả lời này.
jascha

5

Kể từ jQuery 1.4.1, sự kiện di chuột hoạt động với live(). Về cơ bản, nó chỉ liên kết với các sự kiện mouseenter và mouseleave, mà bạn có thể làm với các phiên bản trước 1.4.1.

$("table tr")
    .mouseenter(function() {
        // Hover starts
    })
    .mouseleave(function() {
        // Hover ends
    });

Điều này đòi hỏi hai ràng buộc nhưng cũng hoạt động tốt.


5

Mã này hoạt động:

    $(".ui-button-text").live(
        'hover',
        function (ev) {
            if (ev.type == 'mouseover') {
                $(this).addClass("ui-state-hover");
            }

            if (ev.type == 'mouseout') {
                $(this).removeClass("ui-state-hover");
            }
        });

2
"Ui-state-hover" là gì? Làm thế nào điều đó áp dụng cho câu hỏi ban đầu của người dùng?
IgorGanapolsky

2

CẢNH BÁO: Có một hình phạt hiệu suất đáng kể với phiên bản di chuột trực tiếp. Nó đặc biệt đáng chú ý trong một trang lớn trên IE8.

Tôi đang làm việc trên một dự án nơi chúng tôi tải các menu đa cấp bằng AJAX (chúng tôi có lý do của chúng tôi :). Dù sao, tôi đã sử dụng phương thức trực tiếp cho di chuột hoạt động tuyệt vời trên Chrome (IE9 đã làm được, nhưng không tốt lắm). Tuy nhiên, trong IE8 Nó không chỉ làm chậm các menu (bạn phải di chuột trong vài giây trước khi thả), mà mọi thứ trên trang đều chậm một cách khó khăn, bao gồm cuộn và thậm chí kiểm tra các hộp kiểm đơn giản.

Liên kết các sự kiện trực tiếp sau khi chúng được tải dẫn đến hiệu suất đầy đủ.


2
hữu ích, nhưng nhiều bình luận hơn là một câu trả lời.
mikemaccana
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.