2009-06-10 5 views
0

지난 4 시간 동안 jQuery 이벤트가 한 번만 발생할 수있는 여러 번 실행되는 이유를 알아 냈습니다. 기본적으로 jQuery로 이미지를 회전시키는 광고 배너가 있습니다. 나는 기본적으로 표시되는 하나를 제외한 모든 이미지를로드하는 페이지가로드 될 때까지 기다리고 :jQuery 이벤트가 날 때려 눕힘

$("#mainadslot").prepend('<img>') 
.find(":first-child") 
.attr("src", src) 
.load(function(event) { 
    // Global javascript variable itterates here 
    // to count how many images have loaded. 
    // If they're all done, we can start rotating 
}); 

그리고 난 때문에 어떤 이상한 이유에 onLoad에 대한, 아직 효과를 못 했어 이미지는 각 이미지에 대해 세 번 번 발사됩니다. 내 첫 번째 추측은 거품을 일으키므로 조금 찌르다가 .stopPropagation() jQuery 함수를 시도했다. 불행히도, 그것은 나를 위해 일을하지 않았다.

왜 이런 일이 일어 났는지 설명 할 수 있다면 너무 좋을 것입니다.

+0

그래서 load() 함수에 사용 된 익명 함수가 세 번 발생 했습니까? – roosteronacid

답변

1

#mainadslot에는 하위 요소로 간주 될 수있는 요소가 두 개 이상 있습니까?

find() 표현식은 #mainadslot의 모든 하위 하위 항목을 가져옵니다. 마크 업이 (단지 미친 예)처럼 보이는 경우에 따라서, : 사업부, 범위, 그리고 IMG :

<div id="mainadslot"> 
    <div> 
     <span> 
      <img> 
     </span> 
    </div> 
</div> 

당신은 3 첫 아이를 가질 수 있습니다.

+0

jQuery : first-child 선택자에 대한 제 이해가 잘못되었습니다. 당신의 가설은 참으로 정확했습니다. 고맙습니다! – bloudermilk

+0

나도 find()와 filter()에 의해 얼굴에 펀치되었다. 나는 너의 고통을 느낀다. – ajm

0

'src'속성보다 먼저 load() 이벤트 핸들러를 설정해 보셨습니까?

$("#mainadslot").prepend('<img>') 
.find(":first-child") 
.load(function(event) { 
    // Global javascript variable itterates here 
    // to count how many images have loaded. 
    // If they're all done, we can start rotating 
}) 
.attr("src", src); 

설명서에 따르면 :로드는 요소가 완전히로드되기 전에 설정 한 경우에만 작동합니다.

아마도 문제가 해결되지는 않지만 어쨌든 변경해야 할 부분 일 수 있습니다.

+0

그래, 실제로 원래 어떻게 설정했는지 알았지 만 소스가 없다면로드 시간이 없다고 생각했습니다. 따라서 태그가 DOM에 추가되는 즉시로드가 완료됩니다. 아직 확실하지 않지만 어느 쪽이든 이미지가 크고 이미지로드가 완료되기 전에 .load() 이벤트가 바인딩되는 방식입니다. 귀하의 의견을 보내 주셔서 감사합니다! – bloudermilk

+0

jsbin에서 테스트 케이스를 설정했는데 설명하는 문제는 재현 할 수 없습니다. 링크는 http://jsbin.com/ozihu입니다. 우연히 load() 이벤트를 세 번 바인딩하지 않았습니까? –

관련 문제