【发布时间】:2020-09-07 00:37:38
【问题描述】:
所以下面是我的脚本。我打算做一些非常基本的事情,即悬停在不同按钮(常规/非活动和活动)上时具有不同的背景颜色。点击后,在两种状态之间切换。
现在,此代码可以正确悬停,但不会切换。
<script type="text/javascript">
$(".button").hover(
function() {
$(this).css("background-color", "#E4E4E4");
},
function() {
$(this).css("background-color", "#EDEDED");
}
);
$(".active").hover(
function() {
$(this).css("background-color", "#F5F9FF");
},
function() {
$(this).css("background-color", "#EBF3FF");
}
);
$(".button").click(function() {
alert("The button is clicked!");
$(this).toggleClass("active");
});
</script>
而且,此代码确实会切换,但我必须禁用悬停才能发生它
<script type="text/javascript">/*
$(".button").hover(
function() {
$(this).css("background-color", "#E4E4E4");
},
function() {
$(this).css("background-color", "#EDEDED");
}
);
$(".active").hover(
function() {
$(this).css("background-color", "#F5F9FF");
},
function() {
$(this).css("background-color", "#EBF3FF");
}
);*/
$(".button").click(function() {
alert("The button is clicked!");
$(this).toggleClass("active");
});
</script>
TL;DR 我不能同时使用hover() 和toggleClass()。
注意:虽然会显示警报。
【问题讨论】:
-
没有sn-p,无法确认是否是这个问题,但是:api.jquery.com/hover ""绑定一个或两个处理程序到匹配的元素,当鼠标执行时指针进入并离开元素” - 如果您在按钮上方添加
active,您将不会获得悬停事件 -
问题是
$(".class").event仅适用于在调用代码时存在的元素。当您运行$(".active")时,当时没有 .active 元素,因此不会分配悬停。 -
这是你想要的吗? jsfiddle.net/bnp756eu
-
同样的问题适用 - 对于那些在您调用
$(".active").hover时为 .active 的人,即使您删除了 .active,也会获取事件并保留该事件。您的代码没有说“将悬停应用到 [所有] 活动元素”,而是说“获取 [当前] 活动元素并将悬停应用到它们” -
你能重新描述一下这个问题吗?它做了什么你不想要的?它不做什么?如上所述,悬停不适用于新切换的项目。 toggleClass 可以正常工作,如下所示(切换类会更改字体)jsfiddle.net/u8s2wbzL 切换类不会使“其他”悬停效果起作用
标签: javascript html jquery css hover