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 相关文章推荐
一款Jquery 分页插件的改造方法(服务器端分页)
Jul 11 Javascript
JS选项卡动态替换banner图片路径的方法
May 11 Javascript
jQuery使用contains过滤器实现精确匹配方法详解
Feb 25 Javascript
JavaScript实现简单的拖动效果
Jul 02 Javascript
Vue.JS入门教程之列表渲染
Dec 01 Javascript
收藏AngularJS中最重要的核心功能
Jul 09 Javascript
Node.js 的模块知识汇总
Aug 16 Javascript
详解用vue2.x版本+adminLTE开源框架搭建后台应用模版
Mar 15 Javascript
javascript实现简易的计算器
Jan 17 Javascript
vue+elementui实现点击table中的单元格触发事件--弹框
Jul 18 Javascript
vue 实现图片懒加载功能
Dec 31 Vue.js
使用Typescript开发微信小程序的步骤详解
Jan 12 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计划任务之关闭浏览器后仍然继续执行的函数
2010/07/22 PHP
MySQL连接数超过限制的解决方法
2011/07/17 PHP
window.open被浏览器拦截后的自定义提示效果代码
2007/11/19 Javascript
Js 获取HTML DOM节点元素的方法小结
2009/04/24 Javascript
node.js中的fs.openSync方法使用说明
2014/12/17 Javascript
jQuery实现按键盘方向键翻页特效
2015/03/18 Javascript
基于js实现投票的实例代码
2015/08/04 Javascript
JSON简介以及用法汇总
2016/02/21 Javascript
使用NodeJs 开发微信公众号(三)微信事件交互实例
2016/03/02 NodeJs
JavaScript修改作用域外变量的方法
2016/03/25 Javascript
Windows 系统下设置Nodejs NPM全局路径
2016/04/26 NodeJs
Bootstrap基本组件学习笔记之分页(12)
2016/12/08 Javascript
微信小程序 require机制详解及实例代码
2016/12/14 Javascript
js判断手机号是否正确并返回的实现代码
2017/01/17 Javascript
Vue项目webpack打包部署到服务器的实例详解
2017/07/17 Javascript
express如何解决ajax跨域访问session失效问题详解
2019/06/20 Javascript
vue-resourc发起异步请求的方法
2020/02/11 Javascript
微信小程序开发(一):服务器获取数据列表渲染操作示例
2020/06/01 Javascript
[00:30]明星选手化身超级英雄!2018DOTA2亚洲邀请赛全明星赛来临!
2018/04/06 DOTA
Python中的类与对象之描述符详解
2015/03/27 Python
Python 删除连续出现的指定字符的实例
2018/06/29 Python
win7+Python3.5下scrapy的安装方法
2018/07/31 Python
Python类中的魔法方法之 __slots__原理解析
2019/08/26 Python
Python实现序列化及csv文件读取
2020/01/19 Python
解决安装新版PyQt5、PyQT5-tool后打不开并Designer.exe提示no Qt platform plugin的问题
2020/04/24 Python
python使用QQ邮箱实现自动发送邮件
2020/06/22 Python
python三引号如何输入
2020/07/06 Python
Python字符串对齐、删除字符串不需要的内容以及格式化打印字符
2021/01/23 Python
6种非常炫酷的CSS3按钮边框动画特效
2016/03/16 HTML / CSS
德国前卫设计师时装在线商店:Luxury Loft
2019/11/04 全球购物
集团公司党的群众路线教育实践活动工作总结
2014/03/03 职场文书
保险公司年会主持词
2014/03/22 职场文书
2014年底个人工作总结
2015/03/10 职场文书
百年孤独读书笔记
2015/06/29 职场文书
mysql 8.0.24版本安装配置方法图文教程
2021/05/12 MySQL
Flask使用SQLAlchemy实现持久化数据
2021/07/16 Python