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 相关文章推荐
javascript 必知必会之closure
Sep 21 Javascript
Textbox控件注册回车事件及触发按钮提交事件具体实现
Mar 04 Javascript
javaScript 页面自动加载事件详解
Feb 10 Javascript
js统计录入文本框中字符的个数并加以限制不超过多少
May 23 Javascript
js限制input标签中只能输入中文
Jun 26 Javascript
jquery自适应布局的简单实例
May 28 Javascript
BootStrap无限级分类(无限极分类封装版)
Aug 26 Javascript
jQuery遍历节点树方法分析
Sep 08 Javascript
基于JavaScript实现自定义滚动条
Jan 25 Javascript
Bootstrap栅格系统简单实现代码
Mar 06 Javascript
详解Vue中一种简易路由传参办法
Sep 15 Javascript
vue实现前进刷新后退不刷新效果
Jan 26 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中通过虚代理实现延迟加载的实现代码
2011/06/10 PHP
PHP性能分析工具XHProf安装使用教程
2015/05/13 PHP
PHP数据的提交与过滤基本操作实例详解
2016/11/11 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
极酷的javascirpt,让你随意编辑任何网页
2007/02/25 Javascript
一个JS翻页效果
2007/07/23 Javascript
script不刷新页面的联动前后代码
2013/09/18 Javascript
Javascript 是你的高阶函数(高级应用)
2015/06/15 Javascript
JavaScript Math.round() 方法
2015/12/18 Javascript
js确认框confirm()用法实例详解
2016/01/07 Javascript
javascript每日必学之继承
2016/02/23 Javascript
Bootstrap Table服务器分页与在线编辑应用总结
2016/08/08 Javascript
浅谈微信页面入口文件被缓存解决方案
2018/09/29 Javascript
详解小程序BackgroundAudioManager踩坑之旅
2019/12/08 Javascript
js实现坦克大战游戏
2020/02/24 Javascript
在vue中实现禁止屏幕滚动,禁止屏幕滑动
2020/07/22 Javascript
javascript实现扫雷简易版
2020/08/18 Javascript
[01:02]DOTA2辉夜杯决赛日 CDEC.Y对阵VG赛前花絮
2015/12/27 DOTA
基于python历史天气采集的分析
2019/02/14 Python
Pandas的read_csv函数参数分析详解
2019/07/02 Python
Pycharm及python安装详细教程(图解)
2020/07/31 Python
python+opencv3.4.0 实现HOG+SVM行人检测的示例代码
2021/01/28 Python
Html5实现二维码扫描并解析
2016/01/20 HTML / CSS
茵宝(Umbro)英国官方商店:英国足球服装生产商
2016/12/29 全球购物
荷兰最大的儿童服装店:The Kids Republic
2019/04/13 全球购物
美国购物网站:Clickhere2shop
2021/01/28 全球购物
介绍一下EJB的分类及其各自的功能及应用
2016/08/23 面试题
演讲比赛获奖感言
2014/02/02 职场文书
摄影专业毕业生求职信
2014/03/13 职场文书
诚信承诺书模板
2014/05/26 职场文书
初中学校对照检查材料
2014/08/19 职场文书
服务员岗位职责
2015/02/03 职场文书
硕士学位申请报告
2015/05/15 职场文书
vue+elementUI实现表格列的显示与隐藏
2022/04/13 Vue.js
Python如何用re模块实现简易tokenizer
2022/05/02 Python
nginx设置资源请求目录的方式详解
2022/05/30 Servers