2012-04-26 4 views
1

"나는 각각 하나와 두 개의 이름이있는 스팬과 텍스트 입력이 각각 있습니다. 한 번에 하나만 보여줍니다. "one"을 두 번 클릭하면 "two"에 표시되고 초점을 맞추는 동안 숨겨집니다. "2"가 흐려지면 숨기고 "하나"를 표시합니다. 충분히 쉽게, 입력 키를 누르면 "2"를 흐려 지려고 할 때 문제가 나타납니다. 당신은 아무 곳이나 클릭하면 트리거링 후 초점을 유지하는 요소 유지

.bind({'blur keyup': (function(e){ 
    if(e.type === 'keyup' && e.keyCode !== 10 && e.keyCode !== 13) return; 
    $([this,$(this).prev()]).toggle(); }) 
}) 

엔터 키를 누르면

는 토글 다시 화재 발생했지만 : 여기에 내가 가진 것입니다. 그래서 그것은 불기둥처럼 보이지만 "2"는 초점을 유지합니다. > 비활성화 ->이 return false (흐림 후)를 추가 (예상대로) 함수의 나머지
  • 명 사망 - Here is a fiddle has the two listeners separated (keyup and blur) as well as some extra to help highlight what's happening.

    나는 e.preventDefault()

  • return false (흐림 전) 추가 추가

    • 시도 Enter 키 (??) 또는 그 이후 :
      • 키 업 : (return function(e){ -> jQuery는이 구문을 좋아하지 않습니다.
    • 는 다른 기능에 .toggle()를 수행 -> 차이는,되지 아니하는 는
      • setTimeout (심지어 0의 시간이) -> 문제는 다른 리스너를 (사용 거리
    • 간다 키 [위/아래를 눌러]) -> 차이
    • 별도의 함수를 호출 -

    질문> 차이 : 어떻게이 문제를 해결할 수 있습니까? 예상 된 동작은 Enter 키를 누르면 흐림 효과와 동일한 동작이 나타납니다..

  • +0

    키 업 핸들러에 흐림을 강요하는 대신 다른 요소에 포커스를 설정할 수 있습니다. –

    +0

    작동하는 동안 포커스를 전환 할 다른 입력이 없습니다. 문서 자체에 "집중"하거나 (이 문서의 내용이 무엇인지 찾아 내면) 이상적입니다. – Gary

    +1

    실제로 이것은 매우 흥미 롭습니다. 입력을 숨기지 않으면 블러가 잘 작동합니다. 입력을 토글하면 문제가 발생합니다! –

    답변

    1

    왜 나는 확실하지 않지만 jQuery의 흐림 방법으로 인해 죽었습니다. 두 개의 핸들러를 분리하고 JavaScript의 네이티브 블러 메서드를 사용하여 문제를 해결할 수있었습니다.

    keyup: (function(e){ 
        if(e.keyCode===10 || e.keyCode===13){ this.blur(); } 
    }), 
    blur: (function(){ 
        $([this,$(this).prev()]).toggle(); 
    }) 
    

    jQuery의 흐림이 이런 식으로 행동하는 이유를 다른 사람이 알아낼 때까지 열어 두겠습니다.

    관련 문제