2009-12-10 2 views
1

메뉴가 아닌 페이지의 아무 곳이나 클릭 할 때마다 숨기려는 간단한 드롭 다운 메뉴가 있습니다. 이 기능은 페이지에 iFrames를 추가 할 때까지 FF와 IE에서 잘 작동합니다. iFrame을 클릭하면 메뉴가 IE에서 숨겨지지 않습니다. FireFox에서 잘 작동합니다.자식 iFrame을 클릭 할 때 Internet Explorer가 실행되지 않음 (윈도우 | 문서) .onclick 이벤트

document.onclick 및 window.onclick을 사용해 보았습니다.

아이디어가 있으십니까?

편집 : iframe에 아무 것도 추가하지 않으려합니다. 페이지는 동적이며 메뉴가 이미 생성 된 후 다른 iframe을로드 할 수 있습니다. 끊임없이 새로운 iFrames를 시청하고 이벤트를 첨부해야하는 것은 번거롭거나 바람직하지 않습니다. 예 jQuery.live에 대해 알고 있지만 jQuery는 사용하지 않습니다.

FireFox에서 작동하므로이 동작이 가능하다고 가정합니다. 잘못된 이벤트 유형이나 잘못된 요소에 수신기를 연결하는 것처럼 느껴질 수 있습니다.

답변

1

상위 페이지에서 페이지의 iFrames를 검색하고 onfocus 이벤트를 추가 할 수 있습니다. 이 이벤트는 사용자가 프레임을 클릭 할 때 발생합니다.

+0

iframe에 아무 것도 추가하지 않는 것을 선호합니다. 질문 편집을 참조하십시오. –

+0

아니요,이 이벤트를 상위 페이지의 DOM에있는 iframe 요소에 추가하려고했음을 의미합니다. –

+0

메뉴가 표시 될 때마다 페이지에서 iFrames를 검색하고 포커스 이벤트 수신기를 추가하기로 결정했습니다. 감사! –

1

다른 방법으로는 마우스를 놓았거나 포커스를 놓은 후 설정된 시간이 지나면 드롭 다운 메뉴를 사라지게 할 수 있습니다.

+0

좋은 생각이지만 원하는 기능이 아닙니다. 고마워, 결국 해결할 수 있습니다. –

1

click 이벤트가 최대 소유자에게 window까지 버블 링됩니다. 상위 프레임 window에서 다른 프레임의 콘텐츠 클릭에 대해 알아 보려면 이벤트가 window/document에 있어야합니다 (또는 하위 문서에서 클릭 수를 얻고 부모 문서에 알릴 수 있어야합니다). 예, 번거롭고 이벤트 버블 링에 의존하기 때문에 jQuery live은 작동하지 않습니다.

대체 방법 : 드롭 다운을 열었을 때 그 뒤에있는 투명 '음영'div (iframe을 포함하여 페이지의 다른 모든 항목 앞에 있음)를 열고 음영을 클릭하여 드롭 다운을 닫습니다.

+0

해당 클릭에 대해 페이지의 다른 UI 요소를 사용 중지하는 단점이 있습니다. –

+0

$ ('iframe'). live ("click", 핸들러)와 같은 것을 사용하여 이후의 모든 항목에 대한 onclick 처리기를 공격했습니다. 또 다른 좋은 생각이지만 메뉴가 올라간다면 클릭 한 번으로 페이지의 다른 링크/버튼을 활성화 할 수 없게됩니다. 첫 번째 클릭은 심에 있고 실제 링크/버튼을 누르기 위해서는 또 다른 클릭이 필요합니다. 사용자가 링크를 두 번 클릭해야하는 이유에 대해 혼란 스러울 수 있습니다. –

+0

그렇다고해서 반드시 나쁜 것은 아닙니다. '선택'상자의 드롭 다운과 같은 브라우저 위젯에는 이미이 동작이 있습니다. – bobince

관련 문제