2011-03-15 3 views
1

이 스크립트를 디버깅하는 데 문제가 있습니다. 초기 문제는 "$(). 준비가 함수가 아닙니다."스크립트의이 부분을 래핑했습니다.

$(document).ready(function() 
{ $('#jsddm > li').bind('mouseover', jsddm_open); 
    $('#jsddm > li').bind('mouseout', jsddm_timer);}); 

document.onclick = jsddm_close; 
그래서

(function($) { 
    $(document).ready(function() { 

    $('#menu-main-nav > li').bind('mouseover', jsddm_open); 
    $('#menu-main-nav > li').bind('mouseout', jsddm_timer); 
    }); 

    document.onclick = jsddm_close; 

}) (jQuery); 

같은

까지하지만 지금은 $ (이)를 얻을 .find 라인에 함수가 아니다 "jsddm_close은();" - 어떤 도움을 주셔서 감사합니다. 전체 스크립트를 다음과 같이

<script type="text/javascript"> 
    var timeout   = 500; 
    var closetimer  = 0; 
    var ddmenuitem  = 0; 

    function jsddm_open() 
    { jsddm_canceltimer(); 
     jsddm_close(); 
     ddmenuitem = $(this).find('ul').eq(0).css('visibility', 'visible');} 

    function jsddm_close() 
    { if(ddmenuitem) ddmenuitem.css('visibility', 'hidden');} 

    function jsddm_timer() 
    { closetimer = window.setTimeout(jsddm_close, timeout);} 

    function jsddm_canceltimer() 
    { if(closetimer) 
     { window.clearTimeout(closetimer); 
      closetimer = null;}} 

    (function($) { 

      $(document).ready(function() { 

      $('#menu-main-nav > li').bind('mouseover', jsddm_open); 
    $('#menu-main-nav > li').bind('mouseout', jsddm_timer); 

    }); 

    document.onclick = jsddm_close; 

    }) (jQuery); 

</script> 
+0

왜 그 익명 함수로 자바 스크립트의 모든 포장하지? 그렇게하면'$'**를 통해'jQuery'에 대한 참조가 보장됩니다 ** 당신은 전역 객체를 clobber하지 않습니다. – jAndy

+0

파이어 버그에서 무엇을보고 있습니까? 같은 오류입니까? – Jakub

+1

js 코드에 jQuery가 붙어있는 문제가 있습니다. 'document.onclick = jsddm_close;'를'$ (document) .click (function() {jsddm_close (this);});로 변경하고'jsddm_close'에서'this'를 인수로받습니다. –

답변

4
당신은 'wrappin 익명 함수에 e'erbody까지해야

...

<script type="text/javascript"> 

(function($) { 

    var timeout   = 500; 
    var closetimer  = 0; 
    var ddmenuitem  = 0; 

    function jsddm_open() { 
     jsddm_canceltimer(); 
     jsddm_close(); 
     ddmenuitem = $(this).find('ul').eq(0).css('visibility', 'visible'); 
    } 

    function jsddm_close() { 
     if(ddmenuitem) ddmenuitem.css('visibility', 'hidden'); 
    } 

    function jsddm_timer() { 
     closetimer = window.setTimeout(jsddm_close, timeout); 
    } 

    function jsddm_canceltimer() { 
     if (closetimer) { 
      window.clearTimeout(closetimer); 
      closetimer = null; 
     } 
    } 


    $(document).ready(function() { 
     $('#menu-main-nav > li').bind('mouseover', jsddm_open); 
     $('#menu-main-nav > li').bind('mouseout', jsddm_timer); 
    }); 

    document.onclick = jsddm_close; 

})(jQuery) 

</script> 
+0

멋진 Chris입니다. 감사합니다. n00b 질문을 용서해주세요.하지만 내 솔루션이 왜 잘못 되었습니까? – toomanyairmiles

관련 문제