2010-11-30 3 views
0

에서이 같은 코드가 있습니다도달 변수는 jQuery를

<script type="text/javascript"> 
    var currentPicture;//default picture 
    var picEL;//the image viewer element 
    jQuery("#backImageShower").hover(
     function(i) 
     { 
      picEL = jQuery("#dynloadarxdock > img"); 
      currentPicture = picEL.attr("src"); 
      picEl.attr("src","back.jpg"); 
     }, 
     function() 
     { 
      picEl.attr("src",currentPicture); 
     } 
    ); 
</script> 

을하지만이 코드를 실행하면 picEl가 정의되지 않은 말한다. 나는 이것이 클로저 때문에 발생할 수 있다고 생각하지만,이 코드는 완벽하게 실행됩니다.

<script type="text/javascript"> 
    var currentPicture;//default picture 
    jQuery("#backImageShower").hover(
     function(i) 
     { 
      currentPicture = jQuery("#dynloadarxdock > img").attr("src"); 
      jQuery("#dynloadarxdock > img").attr("src","back.jpg"); 
     }, 
     function() 
     { 
      jQuery("#dynloadarxdock > img").attr("src",currentPicture); 
     } 
    ); 
</script> 

또한이 코드에는 전역 변수가 포함되어 있으며 작동합니다.

누군가 내게 이유를 말해 줄 수 있습니까?

감사합니다.

+0

제안 : 루프가 아닌 변수에'i'를 사용하지 마십시오. 이벤트 처리기의 첫 번째 인수는 대개 이벤트이므로 더 잘 호출하려면 'e' – ThiefMaster

+0

@ThiefMaster : 실제로. '호버 (hover) '에서는 이벤트이며, 사용되지도 않으므로 호버 (hover)에 전달 된 두 번째 콜백 에서처럼 모두 삭제 될 수 있습니다. –

답변

7

문제는 케이스를 혼합하는 것입니다. 변수는 picEL으로 선언되지만 때로는 picEl (소문자 'l', 오류가있는 곳)으로 사용됩니다.

+0

웁스, 네 말이 맞아. :) – Tarik

0

picEL이 아닌 picEL을 사용하고 있습니다.

picEl.attr("src",currentPicture); 

가 있어야한다 : 당신은 당신이 두 번째 호버 기능을 제외하고 모든 곳에서 picEL를 사용하는

picEL.attr("src",currentPicture);