Javascript实现单选框效果

作者:夹心776655 时间:2024-04-23 09:06:42 

本文实例为大家分享了Javascript实现单选框效果的具体代码,供大家参考,具体内容如下

描述: 点击每一个li 将li的内容赋值给 div 给当前点击的li加上背景色, 点击空白部分隐藏

Javascript实现单选框效果

技术要点:

1.事件委托

事件委托: 事件代理, 将子节点要做的事情交给父元素来做

原理: 将原来要给子元素添加的事件, 加给父元素, 事件中通过 target || srcElement 找到对应的子节点, 子节点处理具体的操作

优点: 避免使用for 后续加进来的元素也有同样的事件处理

使用: 如果子节点有统一的事件(每一个li都加点击事件 每一个li都输出元素)


ul.onclick = function(evs){
var ev = window.event || evs;
// console.log(ev.target || ev.srcElement);
var tar = ev.target || ev.srcElement;
tar.style.background = 'red';
}

// 创建节点
var li = document.createElement('li');
li.innerHTML = '12345';
// 追加进去
ul.appendChild(li);

2.阻止冒泡

由于冒泡产生的问题 阻止冒泡解决

依赖于事件对象

标准: ev.stopPropagation();

ie: ev.cancelBubble = true;

一个是方法 一个是属性 需要做兼容

判断方法是否存在:


ev.stopPropagation ? ev.stopPropagation() : ev.cancelBubble = true;

不想让哪一个事件冒泡,就在那一个元素的事件上阻止

代码实现:


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>模拟单选框</title>
<style>
 *{
  margin: 0;
  padding: 0;
 }
 div{
  width: 260px;
  height: 30px;
  border: 1px solid #0000ff;
  margin: 40px auto;
  font: 14px/30px "微软雅黑";
  text-indent: 5px;
 }
 ul{
  width: 260px;
  height: 150px;
  border: 1px solid #0000ff;
  margin: -40px auto;
  display: none;
 }
 ul > li{
  list-style: none;
  width: 100%;
  height: 30px;
  font: 14px/30px "微软雅黑";
  text-indent: 5px;
 }
 ul > li:hover{
  color:#fff5bd;
  background: #fe6601;
 }
</style>
</head>
<body>
<!-- 1.布局: div 和 列表 并且划上加背景色 -->
<div id="content"></div>
<ul>
 <li>HTML</li>
 <li>CSS</li>
 <li>JavaScript</li>
 <li>HTML5</li>
 <li>CSS3</li>
</ul>
<script>
 // 点击每一个li 将li的内容赋值给 div 给当前点击的li加上背景色
 // 点击空白部分隐藏
 // 1.当鼠标移入div时, ul显示, 反之ul隐藏
 // 获取div, ul
 var div = document.querySelector('div');
 var ul = document.querySelector('ul');
 var lis = ul.getElementsByTagName('li');
 console.log(div, ul, lis);
 // 鼠标移入div时, ul显示, onmouseenter不会触发父元素事件
 div.onmouseenter = function(){
  ul.style.display = 'block';
  /* 将li的内容赋值给 div 给当前点击的li加上背景色
  获取点击的li的值 */  
  // 获取ul点击事件
  ul.onclick = function(evs){
   // 增加排他操作
   for(var i = 0; i < lis.length; i++){
    lis[i].style.background = '#ffffff';
    lis[i].style.color = '#000000';
   }
   // 获取事件
   var ev = window.event || evs;
   // 阻止冒泡
   ev.stopPropagation ? ev.stopPropagation() : ev.cancelBubble = true;
   // console.log(ev.target || ev.srcElement);
   // 获取事件的触发源
   var tar = ev.target || ev.srcElement;
   // div的内容更改为相对应触发源的内容
   div.innerHTML = tar.innerHTML;
   // 给当前点击的li加上背景色
   tar.style.background = '#0000FF';
   tar.style.color = '#fff5bd';
  }
 }
 // 点击空白处隐藏
 document.onclick = function(){
  // ul消失
  ul.style.display = 'none';
  // div的值设为空
  div.innerHTML = '';
  // 所有li恢复原来样式
  for(var i = 0; i < lis.length; i++){
   lis[i].style.background = '#ffffff';
   lis[i].style.color = '#000000';
  }
 }
 // 给每一个li添加划上属性
 for(var i = 0; i < lis.length; i++){
  // 为li添加划上事件
  lis[i].onmouseenter = function(){
   this.style.background = '#fe6601';
   this.style.color = '#fff5bd';
  }
  // 为li添加划出事件, 恢复为默认样式
  lis[i].onmouseleave = function(){
   this.style.background = '#ffffff';
   this.style.color = '#000000';
  }
 }
</script>
</body>
</html>

来源:https://blog.csdn.net/qq_37086980/article/details/110870969

标签:js,单选框
0
投稿

猜你喜欢

  • PHP程序员玩转Linux系列 nginx初学者引导

    2023-11-21 19:51:16
  • Python socket如何解析HTTP请求内容

    2022-05-06 20:09:23
  • Python算法应用实战之栈详解

    2022-08-22 21:56:10
  • MySQL中的随机抽取的实现

    2024-01-17 21:07:42
  • Python读取YUV文件,并显示的方法

    2023-03-19 11:44:13
  • Java 数据库连接池c3p0 介绍

    2024-01-22 02:44:24
  • css实现图片倒影效果

    2007-11-05 18:29:00
  • 教你利用Python+Turtle绘制简易版爱心表白

    2023-04-09 19:41:49
  • windows10更换mysql8.0.17详细教程

    2024-01-26 19:56:19
  • Go语言中int、float、string类型之间相互的转换

    2024-02-03 04:32:55
  • 如何用VScode配置Python开发环境

    2021-10-23 11:00:51
  • Flask框架Flask-Login用法分析

    2022-05-20 08:21:27
  • 用python写爬虫简单吗

    2024-01-02 08:03:26
  • SQL语句练习实例之七 剔除不需要的记录行

    2024-01-17 21:15:04
  • mysql数据库设置utf-8编码的方法步骤

    2024-01-19 05:30:56
  • python函数形参用法实例分析

    2023-09-08 21:07:09
  • python中安装模块包版本冲突问题的解决

    2021-07-23 11:04:29
  • Python实现的下载8000首儿歌的代码分享

    2021-02-03 05:41:51
  • Python GUI之tkinter详解

    2021-09-11 06:36:01
  • 为MySQL提权简单方法

    2009-08-29 15:21:00
  • asp之家 网络编程 m.aspxhome.com