2011-03-17 3 views
4

텍스트 입력이 #usernameInput 인 표 셀과 #saveLink 링크가 있습니다. jQuery를 사용하여 #saveLink의 click 이벤트에 함수가 할당되었습니다.jQuery .focusOut() 다음 선택 요소에 따라 달라지는 조건부 동작

내가 달성하고자하는 것은, #usernameInput이 초점을 잃었을 때 그것을 숨기고 싶습니다. 초점을 잃지 않는 한 #saveLink. 즉, 사용자가 #saveLink이 아닌 다른 곳을 클릭하면 #usernameInput을 숨기고 싶지 않으면 #saveLink에서 click 이벤트를 호출하십시오.

나는 $('#usernameInput').focusout()을 처리하는 데 문제가 없지만 저장 링크가 클릭되었는지 감지 할 수 없습니다.

내가 지금까지 가지고있는 것입니다. '#usernameInput은'내가 그것을 숨기려 포커스를 잃을 입니다 내가 acheive하기 위해 노력하고있어

<script type="text/javascript"> 

$('#usernameInput').focusout(function() 
{ 

    if (!$('#saveLink').is(':focus')) 
    { 
     $('#usernameInput').hide(); 
    } 
    return; 

});</script> 

답변

5

. '#saveLink'에 포커스가 없으면 입니다. 즉, 사용자가 '#saveLink'가 아닌 다른 곳을 클릭하면 '#saveLink'에 클릭 이벤트가 발생합니다

어쩌면 당신은 몸에 이벤트를 바인딩 할 수 있고 조금 지금 ... 갱신을위한 e.target

$("body").click(function(event){ 
    if(!$(event.target).is("#saveLink")){ 
    $("#usernameInput").hide(); 
    } 
}); 

부인이 단지 의사 코드를 확인.

+0

완벽합니다. 도와 주셔서 감사합니다. – TheRealTy

+2

잘 작동하지만 탭으로 포커스가 사라지면 어떨까요? –

+0

그 효과가 없습니다. 포커스가 항상 클릭 이벤트와 관련이있는 것은 아닙니다 (Owain 언급과 같은 예시 탭). 나는 포터의 대답 (알 수없는 이유 때문에 투표를하지 않았다)을 좋아한다. – user766304

1

이것이 새로운 지 모르겠지만 오늘 (3.5 년 후) 더 나은 방법을 발견했습니다. event.relatedTarget은 실제로 클릭 한 요소입니다.

$elementLosingFocus.focusout(function (event) { 
    var $elementYouAreTesting; 

    $elementYouAreTesting = $("#whatever"); 

    if (elementYouAreTesting[0] === event.relatedTarget) { 
     // you clicked the element you were testing! 
    } else { 
     // you clicked something else 
    } 
}); 
+0

이것은 "올바른 방법"입니다.하지만 슬프게도 현재 Firefox에서 작동하지 않습니다. https://developer.mozilla.org/en-US/docs/Web/Events/focusout – user766304

+0

사용 사례에 채워지지 않았지만 Chrome을 사용하고 있습니다. – anthonygore

+0

Chrome 또는 Firefox에서이 이벤트에 대한 relatedTarget 속성이 표시되지 않습니다 ... –

관련 문제