JQuery菜单悬停滑动代码报unexpected token错误,求原因(新手)
你的jQuery菜单悬停代码报错原因及修复方案
嘿,作为经常帮新手排查jQuery错误的开发者,我一眼就看到了你代码里的几个语法问题,这就是你拿到unexpected token错误的原因,我给你逐个拆解:
几个关键错误点
错误1:用if语句绑定事件是完全错误的思路
你想实现的是给.huvud li绑定悬停事件,但却写了if('.huvud li')——if是用来做条件判断的,不是用来绑定事件的!正确的做法是直接用jQuery选择器选中元素,然后调用.hover()方法。错误2:hover方法的语法写错了
你写的.hover{完全不符合语法规则:jQuery的方法调用必须用括号(),而且hover方法需要传入两个函数参数——一个处理鼠标进入元素的逻辑,一个处理鼠标离开的逻辑。错误3:子菜单选择器不一致(大概率是笔误)
你在鼠标进入时操作的是ul.hand,离开时操作的是ul.sub,这两个选择器指向的是不同元素,会导致进入展开的菜单和离开收起的菜单不是同一个,效果肯定出问题。
修正后的完整代码
$(document).ready(function() { // 给.huvud下的所有li绑定悬停事件 $('.huvud li').hover( // 鼠标进入li时执行的函数 function() { // 找到当前li下的子菜单ul.sub(请根据你的HTML改成正确的选择器),如果没在动画状态就下滑展开 $('ul.sub:not(:animated)', this).slideDown(500); }, // 鼠标离开li时执行的函数 function() { // 收起当前li下的子菜单 $('ul.sub', this).slideUp(300); } ); });
代码解释
- 用
$('.huvud li').hover()正确绑定悬停事件,传入两个回调函数分别处理「进入」和「离开」状态。 - 每个回调函数里用
this指代当前悬停的li元素,确保只操作当前li下的子菜单,不会影响其他菜单。 - 保留了你原本的
:not(:animated)判断,避免重复触发动画导致的菜单抖动问题。 - 统一了子菜单的选择器(这里用了
ul.sub,你可以根据自己的HTML结构改成ul.hand或者其他正确的选择器)。 - 做了换行和缩进,让代码结构更清晰,新手也更容易看懂逻辑。
内容的提问来源于stack exchange,提问作者hey
相关产品推荐
相关产品推荐

