hover
не является реальным event
, но сокращенный метод, который связывает обработчики для двух событий, mouseenter
и mouseleave
, и как таковой не работает с .one
(как показано here). Для того, чтобы воспроизвести поведение hover
вы должны иметь два привязок, которые будут как срабатывают только один раз, как это:
$("#foo").one("mouseenter mouseleave", function(e){
$(this).toggleClass("bar");
});
выше будет такой же, как в следующем, за исключением того, что он срабатывает только один раз :
$("#foo").hover(function(){
$(this).toggleClass("bar");
});
Если вы хотите, чтобы делать разные вещи на mouseenter
и mouseleave
, необходимо связать отдельные обработчики:
$("#foo").one("mouseenter", function(e){
$(this).addClass("bar").text("Over");
}).one("mouseleave", function(e){
$(this).removeClass("bar").text("Out");
});
W Шляпа я могу читать из вашего кода является то, что вы только хотите связать mouseenter
событие, как это:
$('#ask').one('mouseenter', function() {
$('#homesearch-after').hide(300);
$.doTimeout(300, function() {
hideClosedSearchLink();
showHomeSearch();
});
});
Unrelated на ваш вопрос, но вы можете избавиться от тайм-аута путем добавления кода внутри него непосредственно как callback после завершения 'hide':' $ ('# homesearch-after'). hide (300, function() {/ ** здесь код ** /}); ' –