<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<style>
*{
margin: 0;
padding: 0;
}
.search_engine{
width: 80px;
height: 50px;
line-height: 50px;
text-align: center;
background-color: lightskyblue;
}
ul{
list-style: none;
}
li{
height: 50px;
}
.search_engine .select_search_engine{
display: none;
background-color: lightskyblue;
}
.search_engine:hover .select_search_engine{
display: block;
}
/* 问题 */
/* 父元素加了active伪类后子元素的onclick失效 */
/* 只要加上这行css,click事件就用不了,为什么 */
/* ul.select_search_engine加上 :active 后 li 的 click 就用不了,怎么办, */
.search_engine .select_search_engine:active {
display: none;
}
.search_engine .select_search_engine li:hover{
background-color: #317ef3;
color: white;
}
</style>
<div class="search_engine">
<div class="this_s">百度</div>
<ul class="select_search_engine">
<li class="baidu_s">百度</li>
<li class="bing_s">必应</li>
<li class="google_s">谷歌</li>
</ul>
</div>
<script>
let baidu_s = document.querySelector(".search_engine .select_search_engine .baidu_s");
let bing_s = document.querySelector(".search_engine .select_search_engine .bing_s");
let google_s = document.querySelector(".search_engine .select_search_engine .google_s");
let this_s = document.querySelector(".search_engine .this_s");
baidu_s.addEventListener("click", function () {
this_s.innerText = "百度"
}, false);
bing_s.addEventListener("click",function(){
debugger;
// 进不来
this_s.innerText = "必应"
},false);
google_s.addEventListener("click",function(){
this_s.innerText = "谷歌"
},false);
</script>
</body>
</html>
这问题挺有意思的,我查了一下:active的详细意思,
CSS :active 伪类匹配被用户激活的元素。它让页面能在浏览器监测到激活时给出反馈。当用鼠标交互时,它代表的是用户按下按键和松开按键之间的时间。
,所以你加了display:none样式,会让click事件无法构成(click由一次鼠标按下以及一次提起组合,而现在的目标对象会在该过程消失掉,无法捕获),改成mousedown就可以了