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 表单验证大全
Nov 23 Javascript
Prototype源码浅析 String部分(二)
Jan 16 Javascript
js使用html()或text()方法获取设置p标签的显示的值
Aug 01 Javascript
js实现网页收藏功能
Dec 17 Javascript
关于js二维数组和多维数组的定义声明(详解)
Oct 02 Javascript
js复制内容到剪贴板代码,js复制代码的简单实例
Oct 27 Javascript
jQuery通过改变input的type属性实现密码显示隐藏切换功能
Feb 08 Javascript
原生JS仿QQ阅读点击展开、收起效果
Mar 08 Javascript
AngularJS改变元素显示状态
Apr 20 Javascript
JavaScript EventEmitter 背后的秘密 完整版
Mar 29 Javascript
Vue 莹石摄像头直播视频实例代码
Aug 31 Javascript
vue项目中定义全局变量、函数的几种方法
Nov 08 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
咖啡的传说和历史
2021/03/03 新手入门
PHP使用逆波兰式计算工资的方法
2015/07/29 PHP
php将print_r处理后的数据还原为原始数组的解决方法
2016/11/02 PHP
浅谈Laravel队列实现原理解决问题记录
2017/08/19 PHP
PHP7 windows支持
2021/03/09 PHP
jQuery语法总结和注意事项小结
2012/11/11 Javascript
js获取某月的最后一天日期的简单实例
2013/06/22 Javascript
基于jquery实现的省市区级联无ajax
2013/09/24 Javascript
jquery定时滑出可最小化的底部提示层特效代码
2013/10/02 Javascript
JavaScript中的异常捕捉介绍
2014/12/31 Javascript
JavaScript常用的弹出广告及背投广告实现方法
2015/02/06 Javascript
jQuery插件echarts实现的多折线图效果示例【附demo源码下载】
2017/03/04 Javascript
元素全屏的设置与监听实例
2017/11/28 Javascript
vue element table 表格请求后台排序的方法
2018/09/28 Javascript
JS实现头条新闻的经典轮播图效果示例
2019/01/30 Javascript
自定义Vue中的v-module双向绑定的实现
2019/04/17 Javascript
Nodejs libuv运行原理详解
2019/08/21 NodeJs
nodejs环境使用Typeorm连接查询Oracle数据
2019/12/05 NodeJs
微信小程序vant弹窗组件的实现方式
2020/02/21 Javascript
python实现的登录和操作开心网脚本分享
2014/07/09 Python
Python中文分词工具之结巴分词用法实例总结【经典案例】
2017/04/15 Python
Python给图像添加噪声具体操作
2019/03/03 Python
python读写数据读写csv文件(pandas用法)
2020/12/14 Python
vue.js刷新当前页面的实例讲解
2020/12/29 Python
Kusmi茶美国官网:优质散叶茶和茶包
2019/10/13 全球购物
会计电算一体化个人简历的自我评价
2013/10/15 职场文书
课程设计心得体会
2013/12/28 职场文书
生日派对邀请函
2014/01/13 职场文书
《石榴》教学反思
2014/03/02 职场文书
如何写求职信
2014/05/24 职场文书
镇创先争优活动总结
2014/08/28 职场文书
学院党的群众路线教育实践活动第一阶段情况汇报
2014/10/25 职场文书
教师业务学习材料
2014/12/16 职场文书
先进工作者推荐材料
2014/12/23 职场文书
2015年幼儿园教育教学工作总结
2015/05/25 职场文书
nginx配置文件使用环境变量的操作方法
2021/06/02 Servers