2012-07-18 28 views
8

Tôi đang gặp sự cố với các yếu tố được tạo động trên trạng thái di chuột. Khi tôi di chuột trên phần tử html mới được tạo, nó không hoạt động.Làm thế nào để làm cho jQuery 1.7 .on() di chuột?

Dưới đây là mã của tôi HTML:

<button id="create">create new button</button> 
<button class="hover">hover me</button> 
<div></div> 

jQuery:

var createBtn = $("#create"); 

createBtn.click(function() { 
    $('div').append('<button class="hover">new hover button</button'); 
    return false;   
}); 


$('.hover').hover(function() { 
    alert('you hovered the button!'); 
}, function() { 
    alert('you removed the hover from button!'); 
}); 

Tôi thậm chí đã cố gắng mã này:

$('.hover').on({ 
    mouseenter : function() { 
     alert('you hovered the button!'); 
    }, 
    mouseleave : function() { 
     alert('you removed the hover from button!'); 
    } 

}); 

như đây http://api.jquery.com/on/, nhưng vẫn không có may mắn. Đây cũng là bản trình diễn: http://jsfiddle.net/BQ2FA/

+0

có thể điều này sẽ giúp về việc bật/tắt: http://stackoverflow.com/questions/11283341/jquery-disable-click-until-animation-is-fully-complete –

Trả lời

18

Đây không phải là cú pháp chính xác.

Sử dụng này để lắng nghe sự kiện của bạn cho tự động tạo ra '.hover' yếu tố:

$(document).on('mouseenter', '.hover', function(){ 
     alert('you hovered the button!'); 
}).on('mouseleave', '.hover', function() { 
     alert('you removed the hover from button!'); 
}); 
+2

Đối số đầu tiên cho '.on()' vẫn có thể là một đối tượng (như OP hiện đang làm) nếu bạn muốn tránh phải gọi nó một cách rõ ràng nhiều lần. (Downvote không phải của tôi - câu trả lời này vẫn chính xác). –

+0

@JamesAllardice Có rất nhiều giải pháp có thể, và tôi đồng ý có thể rút ngắn hơn, nhưng cuộc gọi của OP không thể áp dụng cho các yếu tố '.over' được tạo động, đó là những gì tôi đã sửa. –

+1

Tôi biết, tôi đã chỉ ra thực tế là OP sẽ không phải thay đổi nhiều - họ chỉ có thể thay đổi bộ chọn ban đầu và thêm bộ chọn '.hover' làm đối số thứ hai sau bản đồ của tên sự kiện và sự kiện xử lý. Họ không phải thay đổi nó thành 2 cuộc gọi riêng biệt thành '.on()'. (Nhận xét là vì lợi ích của OP, không phải là một lời chỉ trích về câu trả lời của bạn). –

3

Bạn đang sử dụng .on cho trực tiếp ràng buộc, bạn cần phải sử dụng nó cho đoàn:

$('div').on({ 
    mouseenter: function() { 
     alert('you hovered the button!'); 
    }, 
    mouseleave: function() { 
     alert('you removed the hover from button!'); 
    } 
}, ".hover"); 

http://jsfiddle.net/BQ2FA/2/

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