Javascript实现单选框效果


Posted in Javascript onDecember 09, 2020

本文实例为大家分享了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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
ExtJS 2.0实用简明教程 之获得ExtJS
Apr 29 Javascript
对字符串进行HTML编码和解码的JavaScript函数
Feb 01 Javascript
js 判断文件类型并控制表单提交示例代码
Nov 14 Javascript
使用js完成节点的增删改复制等的操作
Jan 02 Javascript
jquery和js实现对div的隐藏和显示方法
Sep 26 Javascript
浅谈JavaScript中的字符编码转换问题
Jul 07 Javascript
浅谈js中对象的使用
Aug 11 Javascript
关于Node.js中Buffer的一些你可能不知道的用法
Mar 28 Javascript
解决vue.js this.$router.push无效的问题
Sep 03 Javascript
详解js静态检查工具eslint配置文件
Nov 23 Javascript
js简单遍历获取对象中的属性值的方法示例
Jun 19 Javascript
基于VUE的v-charts的曲线显示功能
Oct 01 Javascript
javascript实现移动端轮播图
Dec 09 #Javascript
JavaScript实现弹出窗口效果
Dec 09 #Javascript
五句话帮你轻松搞定js原型链
Dec 09 #Javascript
JS常用跨域方法实现原理解析
Dec 09 #Javascript
video.js添加自定义组件的方法
Dec 09 #Javascript
手把手教你如何编译打包video.js
Dec 09 #Javascript
ES6 十大特性简介
Dec 09 #Javascript
You might like
php实现数组筛选奇数和偶数示例
2014/04/11 PHP
改写ThinkPHP的U方法使其路由下分页正常
2014/07/02 PHP
PHP中绘制图像的一些函数总结
2014/11/19 PHP
php中通过DirectoryIterator删除整个目录的方法
2015/03/13 PHP
PHP 中魔术常量的实例详解
2017/10/26 PHP
extjs中form与grid交互数据(record)的方法
2013/08/29 Javascript
JavaScript作用域与作用域链深入解析
2013/12/06 Javascript
jquery遍历select元素(实例讲解)
2013/12/31 Javascript
js删除数组元素、清空数组的简单方法(必看)
2016/07/27 Javascript
jfinal与bootstrap的登出实战详解
2017/11/27 Javascript
Angular4集成ng2-file-upload的上传组件
2018/03/14 Javascript
JS面向对象的程序设计相关知识小结
2018/05/26 Javascript
vue计算属性computed、事件、监听器watch的使用讲解
2019/01/21 Javascript
基于mpvue小程序使用echarts画折线图的方法示例
2019/04/24 Javascript
Javascript实现打鼓效果
2021/01/29 Javascript
[42:23]完美世界DOTA2联赛PWL S3 Forest vs Rebirth 第二场 12.10
2020/12/13 DOTA
python实现上传样本到virustotal并查询扫描信息的方法
2014/10/05 Python
在Windows系统上搭建Nginx+Python+MySQL环境的教程
2015/12/25 Python
详谈python在windows中的文件路径问题
2018/04/28 Python
使用Python+wxpy 找出微信里把你删除的好友实例
2019/02/21 Python
Python读写文件基础知识点
2019/06/10 Python
python如何解析配置文件并应用到项目中
2019/06/27 Python
win8.1安装Python 2.7版环境图文详解
2019/07/01 Python
深入了解Django View(视图系统)
2019/07/23 Python
python中hasattr()、getattr()、setattr()函数的使用
2019/08/16 Python
Python xlwt模块使用代码实例
2020/06/10 Python
python 实用工具状态机transitions
2020/11/21 Python
python3处理word文档实例分析
2020/12/01 Python
HTML5探秘:用requestAnimationFrame优化Web动画
2018/06/03 HTML / CSS
美国沙龙美发产品购物网站:Hair.com by L’Oreal
2020/11/09 全球购物
在子网210.27.48.21/30种有多少个可用地址?分别是什么?
2014/07/27 面试题
共产党员公开承诺践诺书
2014/05/28 职场文书
闭幕词的写作格式与范文!
2019/06/24 职场文书
创业计划书之书店
2019/09/10 职场文书
vue中data改变后让视图同步更新的方法
2021/03/29 Vue.js
Python 数据可视化神器Pyecharts绘制图像练习
2022/02/28 Python