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 相关文章推荐
js 解决“options为空或不是对象”
Dec 22 Javascript
Jquery 实现表格颜色交替变化鼠标移过颜色变化实例
Aug 28 Javascript
javascript与Python快速排序实例对比
Aug 10 Javascript
JavaScript知识点整理
Dec 09 Javascript
AngularJS 中使用Swiper制作滚动图不能滑动的解决方法
Nov 15 Javascript
vue2.0结合DataTable插件实现表格动态刷新的方法详解
Mar 17 Javascript
原生JS京东轮播图代码
Mar 22 Javascript
jQuery层级选择器_动力节点节点Java学院整理
Jul 04 jQuery
javascript定时器取消定时器及优化方法
Jul 08 Javascript
ES6解构赋值的功能与用途实例分析
Oct 31 Javascript
vue实现移动端悬浮窗效果
Dec 01 Javascript
Javascript实现简易天数计算器
May 18 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
第十一节--重载
2006/11/16 PHP
PHP 显示客户端IP与服务器IP的代码
2010/10/12 PHP
PHP5常用函数列表(分享)
2013/06/07 PHP
将word转化为swf 如同百度文库般阅读实现思路及代码
2013/08/09 PHP
在jQuery 1.5中使用deferred对象的代码(翻译)
2011/03/10 Javascript
JavaScript 类型的包装对象(Typed Wrappers)
2011/10/27 Javascript
判断某个字符在一个字符串中是否存在的js代码
2014/02/28 Javascript
JS完整获取IE浏览器信息包括类型、版本、语言等等
2014/05/22 Javascript
14款NodeJS Web框架推荐
2014/07/11 NodeJs
Javascript中的迭代、归并方法详解
2016/06/14 Javascript
详解windows下vue-cli及webpack 构建网站(三)使用组件
2017/06/17 Javascript
js动态设置select下拉菜单的默认选中项实例
2018/08/21 Javascript
vue-test-utils初使用详解
2019/05/23 Javascript
JS实现的tab切换并显示相应内容模块功能示例
2019/08/03 Javascript
javascript自定义加载loading效果
2020/09/15 Javascript
[03:48]大碗DOTA
2019/07/25 DOTA
python 参数列表中的self 显式不等于冗余
2008/12/01 Python
python在Windows8下获取本机ip地址的方法
2015/03/14 Python
用Python的Tornado框架结合memcached页面改善博客性能
2015/04/24 Python
Python使用re模块实现信息筛选的方法
2018/04/29 Python
Python走楼梯问题解决方法示例
2018/07/25 Python
python进阶之自定义可迭代的类
2019/08/20 Python
Python使用tkinter模块实现推箱子游戏
2019/10/08 Python
使用 Python 处理3万多条数据只要几秒钟
2020/01/19 Python
python退出循环的方法
2020/06/18 Python
Django admin组件的使用
2020/10/24 Python
canvas实现图片镜像翻转的2种方式
2020/07/22 HTML / CSS
英国网上花店:Bunches
2016/11/29 全球购物
英国轻奢珠宝品牌:Astley Clarke
2016/12/18 全球购物
Coltorti Boutique官网:来自意大利的设计师品牌买手店
2018/11/09 全球购物
波兰灯具、照明和LED购物网站:Lampy.pl
2019/03/11 全球购物
世界上最受欢迎的花店:1-800-Flowers.com
2020/06/01 全球购物
前台文员的岗位职责
2013/11/14 职场文书
物理课外活动总结
2014/08/27 职场文书
2014年最新领导班子整改方案
2014/09/27 职场文书
React Native项目框架搭建的一些心得体会
2021/05/28 Javascript