从Jquery 1.2.6移动到1.4.1>脚本错误:(

时间:2010-06-12 21:03:05

标签: jquery

我一直在玩一些最初用1.2.6编写的jQuery脚本。 我想使用他的尝试这个脚本和其他一些jquery的东西,同时移动到最新的1.4.1,但我得到一个错误。

代码是:

    GlobalHeader={
    globalNav:function(){
        var recipeLbl="recipes-and-cooking";
        var navTimer=null;
        var bodyId=document.body.id;
        bodyId=(bodyId=='shows'||bodyId=='chefs')?bodyId:recipeLbl;
        var initializeMenu="#sub-nav-"+bodyId+" li";
        hideAll();

        initMenu(initializeMenu);

        function initMenu(initializeMenu){
            var menu=initializeMenu;
            $(menu).find('h3:first span').click(function(){hideAll();});
            $(menu+"[@class ^= 'nav-']").each(function(i){$(this).hover(
                function(e){
                    hideAll();
                    var $this=$(this);
                    var offsetVal="auto";
                    var divs=$(this).nextAll();
                    var width=0;

                    jQuery.each(divs,function(){width=width+parseInt($(this).width());});
                    if($this.hasClass("nav-e")){
                        offsetVal=(($(this).parents().filter('ul').width()-$(this).find('div.drop').width())-width);
                    }
                    else
                    {
                        if((jQuery.browser.msie)&&(jQuery.browser.version==6)){
                            offsetVal=($(this).parents().filter('ul').width()-width)-parseInt($(this).width())-7;
                        }
                        else
                        {
                            offsetVal="auto";
                        }
                    }
                    $('body').bind("click",function(e){bodyClick(e);});
                    navTimer=setTimeout(function(){
                        $this.find('div.drop').css({
                            left:offsetVal,top:"28px",background:"none",display:"block"
                        });
                    navTimer=null;},375);
                },
        function(e){
        clearTimeout(navTimer);
        navTimer=null;
        var closeDiv=$(this);
        if(jQuery.browser.msie){$(this).find('div.drop').css({background:"b2b2b2"});}
        navTimer=setTimeout(function(){
            closeDiv.find('div.drop').css({top:"28px",display:"none",display:"none"});
            navTimer=null;}
        ,100);}
    );}
    )
;}
function bodyClick(e){var $clicked=$(e.target);if($clicked.parents().is('.drop')){return false;}else{hideAll();$('body').unbind();}}
function hideAll(){clearTimeout(navTimer);navTimer=null;$("#sub-nav li[@class ^= 'nav-'] div.drop").each(function(){$(this).css({display:"none"});});}
}};

但是,这行错误$(menu +“[@ class ^ ='nav - ']”)。each(function(i){$(this).hover( 说undefined是null。 jQuery 1.4.1也有错误抱怨“抛出但未被捕获”的错误。

有人能发现修复吗?

非常感谢提前

1 个答案:

答案 0 :(得分:1)

@removed from attribute selectors in jQuery 1.3+,现在应该是:

$(menu+"[class^='nav-']")

你可以在这里查看jQuery 1.4+的当前属性选择器的完整列表(或者当前版本是什么......这个答案会变老:):http://api.jquery.com/category/selectors/attribute-selectors/

您底部的hideAll()功能需要相同的处理:

$("#sub-nav li[class^='nav-'] div.drop")

最后一点,最新的答案是jQuery 1.4。 2 ,不妨得到所有最新的bug fixes and methods it includes,你总能在这里找到最新版本:{{ 3}}