hover
không phải là một thực event
nhưng một phương pháp tốc ký mà gắn bó với xử lý cho hai sự kiện, mouseenter
và mouseleave
, và như vậy không làm việc với .one
(như here). Để tái tạo các hành vi của hover
bạn phải có hai với phím tắt rằng cả hai sẽ kích hoạt một lần duy nhất, như thế này:
$("#foo").one("mouseenter mouseleave", function(e){
$(this).toggleClass("bar");
});
Trên đây sẽ là tương tự như sau, với ngoại lệ cho nó kích hoạt một lần duy nhất :
$("#foo").hover(function(){
$(this).toggleClass("bar");
});
Nếu bạn muốn làm những việc khác nhau trên mouseenter
và mouseleave
, bạn cần phải ràng buộc xử lý riêng biệt:
$("#foo").one("mouseenter", function(e){
$(this).addClass("bar").text("Over");
}).one("mouseleave", function(e){
$(this).removeClass("bar").text("Out");
});
W mũ tôi có thể đọc từ mã của bạn là bạn đang chỉ tìm cách để ràng buộc sự kiện mouseenter
, như thế này:
$('#ask').one('mouseenter', function() {
$('#homesearch-after').hide(300);
$.doTimeout(300, function() {
hideClosedSearchLink();
showHomeSearch();
});
});
Không liên quan đến câu hỏi của bạn, nhưng bạn có thể thoát khỏi thời gian chờ bằng cách thêm mã bên trong nó trực tiếp như một gọi lại sau khi 'hide' kết thúc:' $ ('# homesearch-after'). hide (300, function() {/ ** code here ** /}); ' –