2009-09-10 2 views
4

이것은 내가 DOM에로드 $ .load()를 사용하고 파일입니다 이로드되면이 지연되면서 해당 기능이 $ .load()입니까?한 이상한 문제는

그렇다면 어떻게 구현 되나요?

놀라운 느낌!

+0

어떻게 지연 되니? $ .load()가 호출되었을 때 경고가 발생하지 않는다는 것을 의미합니까? 대신이 작업과 DIV가 클릭 된 후에 만 ​​발생합니다. –

+0

브라우저에서 직접 파일에 액세스하면 (경고없이) 스크립트가 예상대로 작동하지 않습니다. 그러나 $ .load()를 사용하여 다른 페이지로로드하면 스크립트가 작동합니다 딸깍 하는 소리). – omg

+0

아마도 DOM을로드하면 해당 이벤트를 바인딩하기 전에 DOM을 준비 할 준비가되지 않기 때문일 수 있습니다. 그러나로드를 사용하면 바인딩하기 전에 DOM 시간을로드하고 준비 할 수 있습니다. – TehOne

답변

9

나는 JQuery와 소스를 통해 읽은와 DOM 객체에 성공적으로 바인더 제본 이유, 그리고 여기 내가 찾은 내용은 다음과 같습니다

(줄 번호는 압축되지 않은 jQuery를 1.3 참조. 2)

  1. jQuery.load 궁극적으로 반응을 얻고 삽입 할 수있는 결과와 jQuery를 html 메소드를 호출합니다. (줄 3267 근처)
  2. jQuery.html은 jQuery append 메서드를 호출합니다. (줄 488)
  3. jQuery.append은 DOM 노드를 삽입하는 콜백 함수를 사용하여 domManip 메서드를 호출합니다. (라인 253)
  4. domManip(줄 514) 조금 까다 롭습니다하지만, 궁극적으로는 사실에 삽입 할 수있는 콜백에 DOM 노드를 통과 않습니다 후이를 삽입 한 후 각 스크립트 에 대한 evalScript를 호출 로드 된 html의 순서에 관계없이 DOM 노드 (라인 526).

따라서 jQuery는 실제로 지연된 방식으로 스크립트를 실행합니다!

루크 소스를 사용하십시오.

0

"브라우저에서 파일을 직접 클릭하면 (경고없이) 스크립트가 예상대로 작동하지 않습니다. 그러나 $ .load()를 사용하여 다른 페이지로로드하면 스크립트가 작동합니다 (클릭하면 알려줍니다.) - Shore "

브라우저에서 파일을로드 할 때 클릭 할 때 알림이없는 이유는 브라우저에서"$('.close')... "행을 읽을 때 DOM 객체가 없기 때문입니다 "close"의 클래스는 아직 스크립트 태그 뒤에 있기 때문에

다음과 같은 방법으로이 문제를 해결할 수 있습니다

지연 부분에 관해서는
$(document).ready(function(){$('.close').click(function() { alert(1) });}); 

, 그것은 당신이 $ .load()를 사용할 때 즉, 함수가 먼저 파일을로드하기 때문에, 다음 DOM에 소스를 넣어이다 목적. 소스를 DOM 객체에 넣은 다음 파일의 <script> 태그를 구문 분석합니다. 그게 당신의 클릭 이벤트 클래스 close

+0

소스를 DOM 객체에 넣은 후 파일의