使用jquery在悬停时更改背景颜色无法正常工作
Changing background-color on hover not working properly using jquery
我正在尝试使用JQuery更改悬停时的菜单选项背景颜色。我所有的代码都运行良好,我遇到的唯一问题似乎与 CSS 相关。当背景颜色发生变化时,它似乎只改变文本的背景颜色,而不是整个div,这就是我想要的。我觉得奇怪的是,当我进入menuOption元素的内联CSS并手动更改背景颜色时,它会更改整个divs背景颜色(这就是我想要的)。但是,我需要使用 JQuery 来实现这一点。
标记代码段
<div class='menuOption' style='list-style-type:none; border:1px solid red; float:left; width:180px; height:20px;'>
<a href='index.php/shop/$sub[cat_url]/' style='color:black;'>
<div class='cat_name'>$sub[cat_title]</div>
</a>
<div class='sub_menu' style='display:none; z-index:100; margin-top:-12px; position:absolute; background-color:#ddd; margin-left:182px; box-shadow:3px 3px 6px #444;'>$itemlist</div>
</div>
JQuery 片段
$(".cat_name").hover(function(){
$(this).parent().parent().find(".sub_menu").show();
$(this, ".menuOption").css("background-color", "#bbb");
});
$(".cat_name").mouseleave(function(){
$(this, ".menuOption").css("background-color", "#eee");
});
我感谢关于如何解决这个问题的任何建议。谢谢。
这应该可以做你想要的:
示例:http://jsfiddle.net/jrDph/3/
$(".cat_name").hover(function() {
$menuOption = $(this).closest(".menuOption");
$menuOption.find(".sub_menu").show();
$menuOption.css("background-color", "#bbb");
},
function() {
$menuOption = $(this).closest(".menuOption");
$menuOption.find(".sub_menu").hide();
$menuOption.css("background-color", "#eee");
});
理论:你不会把你的JavaScript放在"文档加载后执行此操作"块中。这看起来像这样:
$.fn.ready(function() {
$(".cat_name").hover(function(){
$(this).parent().parent().find(".sub_menu").show();
$(this, ".menuOption").css("background-color", "#bbb");
});
$(".cat_name").mouseleave(function(){
$(this, ".menuOption").css("background-color", "#eee");
});
});
作为参考,$.fn.ready
是另一种说$(document).ready
的方式(我相信这更快)。
不过,这可能完全是一个单独的问题。
试试这个代码
http://jsfiddle.net/jt795/1/
$(this, "menuoption") it's not the rightway
单独编码$(这个).css(....)$("菜单选项").css(...)因为 $(this) 返回对象,它不会给出标签名称,所以你不能那样写。
以下是对jQuery的一个想法:
如果你打算使用 find() 来搜索 DOM,那么你应该使用 closest() 来搜索 DOM(而不是 .parent().parent())。你可以输入 .closest('div') 或 .closest('.menuOption')。然后,如果您决定需要添加另一个包装猫名的元素,则不必添加另一个 parent() 调用。一个方法调用通常比多个方法调用好。
另外,我正在成为咖啡脚本的大力倡导者。 http://coffeescript.org/。如果你有心情学习一些新的东西,你应该研究一下。它编译为javascript,看起来很像javascript减去所有的括号,括号和分号。易于阅读的代码是最好的代码!
试试这段代码
$(".cat_name").hover(function(){
$(this).parent().parent().find(".sub_menu").show();
$(this).css("background-color", "#bbb");
$(".menuOption").css("background-color", "#bbb");
}, function(){
$(this).css("background-color", "#eee");
$(".menuOption").css("background-color", "#eee");
});
- Javascript:selenium Web驱动程序isDisplayed()不工作
- jQuery UI自动完成突然停止工作
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- JavaScript打印功能使日历停止工作
- Javascript.getHours()工作不正常
- 为什么这在IE中的工作方式与在Firefox中不同
- 视频HTML没有'无法在Internet Explorer 11上工作
- 扩展移相器按钮类不工作
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- 正在尝试使用if和else添加类,但无法正常工作
- Jquery FadeIn FadeOut 只工作一次
- Foreach无法在Typescript中工作
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- JS可以在Chrome中工作,但不能在Firefox中工作
- ajaxToolkit PopupControlExtender不工作.过时的
- HTML标记在脚本标记中工作
- javascript扫雷器floodfill算法不能正常工作