2011-03-15 97 views
1

我在调试这个脚本时遇到问题,最初的问题是“$()。ready不是函数”,所以我包装了这部分脚本:

$(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

你为什么不换行所有的JavaScript成匿名函数?这样你就可以通过''''**加上**保证'jQuery'的引用,而且不会破坏全局对象。 – jAndy 2011-03-15 19:59:53

+0

你在Firebug中看到了什么?同样的错误? – Jakub 2011-03-15 20:01:05

+1

存在js代码与jQuery混淆的问题。把'document.onclick = jsddm_close;'改成'$(document).click(function(){jsddm_close(this);});'并在'jsddm_close'中接收'this'作为参数 – 2011-03-15 20:02:27

回答

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

这是伟大的克里斯,谢谢 - 原谅n00b问题,但为什么我的解决方案不正确? – toomanyairmiles 2011-03-15 20:22:53