2011-01-09 6 views
6

호버 기능을 한 번만 실행할 수있는 방법이 있습니까? 이것은 내가 현재 시도하고있는 것입니다 :jQuery - 호버와 함께 .one() 사용

$('#ask').live('hover', function() { 

    $('#homesearch-after').hide(300); 

    $.doTimeout(300, function() { 
     hideClosedSearchLink(); 
     showHomeSearch(); 
    }); 

}); 

하지만 작동하지 않습니다. 이 호버를 한 번만 활성화하려면 어떻게해야합니까?

.live를 .one 및 .bind ...로 변경해 보았습니다. 결과적으로 아무것도 없습니다.

+2

관련없는 질문에,하지만 당신은으로 직접 내부에 코드를 추가하여 시간 제한을 제거 할 수 있습니다 –

답변

10

당신은 이미 자신에게 대답했습니다. .one() (.live()이 아님)을 사용하십시오.

그러나 lasseespeholt가 단지 의견에서 지적했듯이 .hover()mouseentermouseleave에 바인딩하기위한 약식이며 이벤트 자체가 아닙니다.

이 시도 :

$('#ask').one('mouseenter', function() { 

    $('#homesearch-after').hide(300); 

    $.doTimeout(300, function() { 
     hideClosedSearchLink(); 
     showHomeSearch(); 
    }); 

}); 

을 그 여전히 작동하지 않으면, 그냥 끝났어 후 즉시 보내고 '.hover() 다음 .unbind()을 좋은 팔자를 사용해보십시오.

$('#ask').hover(function() { 

    $('#homesearch-after').hide(300); 

    $.doTimeout(300, function() { 
     hideClosedSearchLink(); 
     showHomeSearch(); 
    }); 

    // Again taking into account what lasseespeholt said 
    $(this).unbind('mouseenter mouseleave') 

}); 
+1

이 코드를 사용할 때 어떤 이유로,이 코드는 다음과 같이 처리됩니다. 아무것도하지 않는다. =/ – Jared

+0

@ Jared : JS에 의해 귀하의 페이지에 동적으로 추가 된 # ask입니까? – BoltClock

+0

아니요, 정적 HTML과 함께 표시됩니다. – Jared

8

hover는 두 가지 이벤트, mouseentermouseleave에 대한 핸들러를 결합하는 실제 event하지만 속기 방법이 아니며, (here을 같이) 등 .one 작동하지 않습니다. 그것은 단지 한 번 발사 것을 제외하고,

$("#foo").one("mouseenter mouseleave", function(e){ 
    $(this).toggleClass("bar"); 
}); 

은 위의 다음과 같은 것이다 : hover의 동작을 복제하려면 모두 같이, 한 번만 트리거이 바인딩을해야 할 것 :

$("#foo").one("mouseenter", function(e){ 
    $(this).addClass("bar").text("Over"); 
}).one("mouseleave", function(e){ 
    $(this).removeClass("bar").text("Out"); 
}); 

W :

$("#foo").hover(function(){ 
    $(this).toggleClass("bar"); 
}); 

당신이 mouseentermouseleave에 다른 일을하려면

, 별도의 핸들러를 바인드해야 난 당신의 코드에서 읽을 수있는 모자 만이처럼 mouseenter 이벤트를 바인딩 찾고 있다는 것입니다 :

$('#ask').one('mouseenter', function() { 
    $('#homesearch-after').hide(300); 
    $.doTimeout(300, function() { 
     hideClosedSearchLink(); 
     showHomeSearch(); 
    }); 
}); 
+1

또는, 예를 들어'.one ('mouseenter mouseleave', function (e) {...)' – BoltClock

+0

@BoltClock, 내 예제와 같이 '토글'을 수행하려는 경우에 더 좋습니다. 나는 그것을 추가 할 것이다! – mekwall