2014-05-19 2 views
1

다음 게시물은 이전 질문과 관련되어 있습니다. here.onblur와 함께 onclick 이벤트를 올바르게 처리하는 방법

2 가지 문제는 독립적이지만 구현하는 동일한 기능인 예측 텍스트와 관련이 있습니다.

두 개의 이벤트 onbluronclick이 어떻게 호출되는지에 관한 문제가 있습니다.

사용자가 텍스트 상자에 일부 문자를 입력하고 전체 단어를 입력하는 대신 제안을 클릭하기로 결정한 후에 상황이 발생합니다.

나는 각 제안에 onlick 처리기를 첨부했습니다.

그러나 내 텍스트 상자에 onblur 처리기가 연결되어 있습니다.

문제는 onblur 처리기가 제안 상자를 닫고 내용을 파괴해야한다는 것입니다.

클릭 한 div의 값을 복사하여 텍스트 상자에 복사하려면 onlick 핸들러에 내용이 필요합니다.

따라서, 딜레마. onblur 핸들러에 의해 이미 파괴 된 것이라면 아무것도 복사 할 수 없습니다.

onblur 이벤트는 어떻게 트랩하나요? 사용자가 제안 중 하나를 "클릭"하면 onblur가 트리거되었는지도 알아낼 수 있습니까?

희망 사항은 제 질문에 의미가 있습니다.

+0

제안 사항을 클릭하면 흐림 효과가 먼저 발생하고 클릭 처리기가 필요한 작업을 수행하기 전에 해당 단어가 사라지는 것을 말하고있는 것입니까? – Seth

+0

@Seth - 맞습니다. 사용자가 제안을 클릭하면 onblur 핸들러가 먼저 실행됩니다. –

+2

일부 코드를 붙여주세요. 바이올린도 도움이 될 것입니다. – Jonathan

답변

1

부모님 div에서 내 텍스트 입력란과 자동 완성 div를 모두 감싸고 부모님의 onblur를 설정하는 등 여러 가지 작업을 시도했지만 아무 효과가 없습니다. 분명히 div에 onblur 이벤트를 할당 할 수 없습니다 (포커스가 시작될 수 없으므로).

대답은 세스가 제안한대로 onblur 이벤트에서 시간 초과를 설정하는 것이 었습니다.

onblur="setTimeout(function() {closeSuggestionBox();}, 100);" 

게시물에 대한 설명은 here입니다.

+0

'setTimeout'은 내 대답에 설명 된 이유 때문에 이상적인 해결책이 아닙니다. http://stackoverflow.com/a/36691651/1601953 기본적으로 사용자는 다음과 같은 위험한 가정을합니다. 요소가 눈 앞에서 사라지기 전에 마우스를 'n'ms 이내에 클릭하십시오. – Chris