2009-08-25 5 views
2

이벤트 핸들러 (특히 iframe에서)가 손실 된 원인이 알려진 jquery인지 확인하고 싶습니다.jquery 이벤트가 손실되었습니다.

이상한 종류의 문제가 있습니다. 두 개의 iframe으로 구성된 webapp를 만들었습니다. 먼저 첫 번째 iframe에 콘텐츠를로드합니다. 첫 번째 iframe 콘텐츠 dom에 jquery를 사용하여 일부 이벤트 이벤트 처리기를 추가합니다. 모든 것이 작동합니다. 사용자 입력시 두 번째 iframe에 페이지가로드됩니다. 여기에서도 jquery를 사용하여 일부 이벤트 핸들러를 추가합니다. 그러면 이상한 일이 발생합니다. jquery가 첫 번째 iframe에서 이벤트 핸들러를 잃어 버렸습니다. 이벤트 리스너를 옛 방식으로 추가하면 여전히 남아 있기 때문에 'jquery lost'라고 말했습니다.

+0

그들은 최초의 iframe에 작동합니까? 동일한 도메인 문제 일 수 있습니다. – geowa4

+0

그들은 두 번째에 무언가를로드 할 때까지 첫 번째 I 프레임에서 작동합니다. iframe이 포함 된 페이지와 iframe에로드 된 페이지가 동일한 도메인에 있습니다. 이벤트 핸들러는 'father'가 아닌 자식 페이지에서 바인드됩니다. –

+0

와우, 마지막 부분은 정말 흥미 롭습니다. jQuery가 유일하게 실행되고 있습니까? 그렇다면 일관되게 재현하고 샘플 페이지를 만들고 버그를 제출할 수 있습니다. 그것은 아무도 그것이 일어날 좋은 이유를 생각할 수 없다고 가정합니다. – geowa4

답변

0

live을 사용하여 이벤트를 바인딩 할 수 있습니다. 이렇게하면 동일한 선택기로 새 요소를 추가 할 때 해당 요소가 이벤트에 바인드됩니다.

$("p").live("click", function(){ 
    $(this).after("<p>Another paragraph!</p>"); 
}); 

경우 있을 것이다 페이지에 추가 될 때마다 다음 페이지

너무를 바인더 제본.

+0

불행히도, 나는 처음 프레임에서 꽤 복잡한 webapp를 사용했습니다. 모든 바인드 기능을 라이브로 대체하는 것이 어려울 수도 있고 어딘가에 불가능할 수도 있습니다. 또한 첫 번째 iframe의 DOM에 콘텐츠를 추가하지 않습니다. –

2

문제가 해결되었습니다.

두 번째 iframe의 src가 변경되었을 때 (두 번째 이후부터 모든 문제가 발생 함) 두 번째 iframe의 src가 변경되어 두 번째 프레임이 HTML에서 정적으로 코딩 된 경우 문제가 발생하여 iframe2.contentWindow 또는 iframe2.contentDocument에 액세스했습니다.

문제를 해결하기 위해 나는 항상 두 번째 iframe을 제거하고 다시 작성하고 javascript를 통해 동적으로 dom에 추가합니다.

문제는 (정확한 버전에 대한 확실하지) MIPS 임베디드 오페라 9.7에서 발생

관련 문제