我已经使用这段代码在网站上获得了一个下拉式菜单。 它在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代码在页面上运行正常,只有当将鼠标悬停在菜单项上时,下拉列表才能正常工作。 如果有人能帮我找到答案,我们将不胜感激。
谢谢,
答案 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
};
});