2012-04-04 2 views
0

내가하려고하는 것은 포커스가 다른 특정 요소 (다른 SELECT)로 옮겨 졌을 때 요소 (SELECT)가 포커스를 잃을 때 테스트하는 것입니다. 초점이 사라지고 두 가지 중 하나에 있지 않을 때 무언가를 실행하고 싶습니다.어떤 요소가 포커스를 잃어 버렸을 때 테스트하기

문제는 다른 셀렉션에 포커스를 잃었을 때 첫 번째 선택에서 테스트했지만 DOM이 아직 업데이트되지 않은 경우입니다.

$select1.on("blur", function() { 
    if($select2.is(":focus")) 
    { 
     // do something 
    } 
    else 
    { 
     // do something else 
    } 
}); 

$ 선택 1과 선택 2 $이 요소를 포함 두 변수 :

는 여기에 내가 무슨 짓을했는지의 exemple입니다. JQuery는 요소가 포커스를 얻었을 때 식별자 ": focus"를 추가했지만 읽은 것처럼 작동하지 않습니다.

모든 경우에 "else something"으로 이동합니다.

답변

2

매트는 이벤트 순서에 대해서는 맞지만 조금 더 창조적 일 수 있습니다.

예를 들어 setTimeout을 사용하여 흐리게 처리를 지연하면 이미 초점을 맞췄다는 것을 알 수 있습니다. 단순한.

$select1.on("blur", function() { 
    window.setTimeout(function() { 
    if($select2.is(":focus")) 
    { 
     // do something 
    } 
    else 
    { 
     // do something else 
    } 
    },100); 
}); 

시도해보십시오.

+0

나는이 해결책을 고려하지 않은 수치 스러울 정도로 내 머리를 ...니다. P – Matt

+0

두 분 모두에게 감사드립니다 ... 이제는 잘됩니다. – maniak

+0

@Matt은 해킹을 잘하지만 JavaScript는 낮은 진입 점과 브라우저 기발한 기록으로 인해 약간 해킹되는 경향이 있습니다. –

1

blur 이벤트가 분명히새로운 요소의 focus되기 전에, 당신이 할 수있는 것은 하나 개의 이벤트에 변수를 설정하고 다른 그것을 감지되고 해고이기 때문입니다.

$select1.on('blur', function (e) { 
    var $that = $(this); 

    setTimeout(function() { 
     if (($that.data('focussed') || 0) > e.timeStamp - 5) { 
      // Do something 
     } else { 
      // Something else 
     } 
    }, 1); 
}); 

$select2.on('focus', function (e) { 
    $select1.data('focussed', e.timeStamp); 
}); 

여기에서 작업하십시오. http://jsfiddle.net/uZAMm/

+0

$ select2가 포커스를 얻지 못한 경우에만 어떻게 조치를 취할 수 있습니까? 나는 그가 그것을 얻지 못할 수도 있기 때문에 $ select2.focus에서 테스트 할 수 없다. – maniak

+0

@maniak : 코드가 있습니다. 포커스가 전송되면 실행하고자하는'// Do something'에 코드를 추가하고, 그렇지 않으면 실행하고자하는 다른 코드에 // 코드를 추가하십시오. – Matt

+0

고마워,하지만 functionName.call (this)을 사용하여 동일한 결과를 얻을 수 있습니까? 왜냐하면 setTimeout을 사용하는 것이 부적절하다는 것을 알았 기 때문에 (내가 그렇게 잘못했을 수도 있습니다 = D). – maniak

관련 문제