jQuery和IE,对象不支持这个属性或方法

时间:2011-11-22 15:21:50

标签: javascript jquery internet-explorer

我已经使用这段代码在网站上获得了一个下拉式菜单。 它在IE以外的所有浏览器上都可以正常工作,甚至可以在IE上正常工作,除非在这一页上我得到“对象不支持此属性或方法”错误。

这是IE告诉我错误的地方,这部分是在“页眉”文件中,首先在页面的其余部分之前加载。

<script type="text/javascript"> 
$(document).ready(function(){
    $("#nav-one li").hover(
        function(){ $("ul", this).fadeIn("fast"); }, 
        function() { } 
    );

if(document.all){
    $("#nav-one li").hoverClass("sfHover");//THIS LINE IS WHERE THE ERROR IS
    };
});

$.fn.hoverClass = function(c) {
    return this.each(function(){
    $(this).hover( 
        function() { $(this).addClass(c);  },
        function() { $(this).removeClass(c); }
        );
    });
};    
</script> 

我认为错误不在代码中,因为它可以正常运行,除了这个错误之外,每个页面都没有错误,这也是唯一使用其他jQuery代码的页面。 其余的jQuery代码在页面上运行正常,只有当将鼠标悬停在菜单项上时,下拉列表才能正常工作。 如果有人能帮我找到答案,我们将不胜感激。

谢谢,

3 个答案:

答案 0 :(得分:5)

当您致电hoverClass时,尚未定义。您需要在代码顶部声明$.fn.hoverClass

$.fn.hoverClass = function(c) {
    return this.each(function(){
    $(this).hover( 
        function() { $(this).addClass(c);  },
        function() { $(this).removeClass(c); }
        );
    });
};   
$(document).ready(function(){
    $("#nav-one li").hover(
        function(){ $("ul", this).fadeIn("fast"); }, 
        function() { } 
    );

if(document.all){
    $("#nav-one li").hoverClass("sfHover");//THIS LINE IS WHERE THE ERROR IS
    };
}); 

答案 1 :(得分:2)

您在宣布之前访问$.fn.hoverClass。你应该在任何其他代码之前声明/加载所有插件,只是为了安全。

此外,在$.fn.hoverClass中,您不需要.each,您只需return this.hover()。 (另外,if语句后你不需要分号。

$.fn.hoverClass = function(c) {
    return this.hover( 
        function() { $(this).addClass(c);  },
        function() { $(this).removeClass(c); }
    );
}; 

$(document).ready(function(){
    $("#nav-one li").hover(
        function(){ $("ul", this).fadeIn("fast"); }, 
        function() { } 
    );

    if(document.all){
        $("#nav-one li").hoverClass("sfHover");//THIS LINE IS WHERE THE ERROR IS
    }
});

答案 2 :(得分:0)

我认为插件被jQuery覆盖了。可能是你在这个页面上多次包含jQuery。试试这个

$(document).ready(function(){

$.fn.hoverClass = function(c) {
    return this.each(function(){
    $(this).hover( 
        function() { $(this).addClass(c);  },
        function() { $(this).removeClass(c); }
        );
    });
};  

    $("#nav-one li").hover(
        function(){ $("ul", this).fadeIn("fast"); }, 
        function() { } 
    );

if(document.all){
    $("#nav-one li").hoverClass("sfHover");//THIS LINE IS WHERE THE ERROR IS
    };
});