我试图给予我的用户能够将鼠标悬停在一个选项上以高亮显示它,或者按下数字键以高亮显示相应的选项。问题是当object.style.backgroundColor运行时,它似乎覆盖了我在css文件中的悬停效果。换句话说,如果我按下任何键,我就不再有悬停效果了。对此有什么解决方案?
<!-- my HTML -->
<head>
<link rel="stylesheet" href="test.css" />
</head>
<body>
<p id='option1'>option 1</p>
<p id='option2'>option 2</p>
<p id='option3'>option 3</p>
<script src="test.js"></script>
</body>
/* my CSS */
p {
background-color: red;
}
p:hover {
background-color: blue;
}
/* my javascript */
// highlights option based on keyup
document.addEventListener("keyup", function(event) {
unhighlightOption(); // to unhighlight any already highlighted elements
switch (event.which) {
case 49: // 1
case 97: // numpad 1
document.getElementById('option1').style.backgroundColor = 'blue';
break;
case 50: // 2
case 98: // numpad 2
document.getElementById('option2').style.backgroundColor = 'blue';
break;
case 51: // 3
case 99: // numpad 3
document.getElementById('option3').style.backgroundColor = 'blue';
break;
default:
console.log('not a valid key');
}
});
// loop to unhighlight all options
function unhighlightOption() {
for (let i=1; i<4; i++) {
document.getElementById('option' + i).style.backgroundColor = 'red';
}
}
我尝试过使用addEventListener(“mouseenter”,function(){code})高亮显示和使用addEventListener(“mouseleave”,function(){code})取消高亮显示,但如果可能的话,我更愿意将所有或大部分样式保留在CSS文件中。
2条答案
按热度按时间qlvxas9a1#
这是因为内嵌样式的特殊性比导入样式更强。如果你只是想改变你的CSS代码来让它工作,只需在hover块中添加一个
important
。wn9m85ua2#
我去掉了css中的悬停效果,添加了"onmouseover ="高亮显示('optionNumber '); "添加到我的HTML元素中。我在javaScript文件中添加了mouseover函数,现在它按照我想要的方式工作。虽然我承认我很失望,但我不能在CSS中保留我的样式。结果代码如下所示: