javascript事件委托,事件代理,元素绑定多个事件之练习篇
<ul id="parent-list">
<li id="post-1">item1</li>
<li id="post-2">item2</li>
<li id="post-3">item3</li>
<li id="post-4">item4</li>
<li id="post-5">item5</li>
<li id="post-6">item6</li>
</ul>
<script>
var nav = document.getElementById("parent-list");
var li = nav.getElementsByTagName("li");
//方法一
/*var len = li.length;
for(var i=0;i<len;i++){
li[i].index = i;
li[i].onclick = function(e){
alert(this.index+" & "+this.innerHTML+" & " +e.target.id+ " & " +e.target.tagName);
}
}*/
//方法二
/*nav.onclick = function(){
var e = arguments[0] || window.event,
target = e.srcElement ? e.srcElement : e.target;
alert(target.innerHTML);
}*/
//获取指定属性名的属性值
/*var len = li.length;
for(var i=0;i<len;i++){
//alert(li[i].getAttribute("id"));
li[i].onclick = function(){
alert(this.getAttribute("id"));
}
}*/
// 获取父节点,并为它添加一个click事件
document.getElementById("parent-list").addEventListener("click",function(e){
// 检查事件源e.targe是否为Li
if(e.target && e.target.nodeName =="LI"){
console.log("List item",e.target.id,"was clicked!");
}
},false)
</script>
<ul id="myLinks">
<li id="goSomewhere">go somewhere</li>
<li id="doSomething">do something</li>
<li id="sayHi">say hi</li>
</ul>
<script>
//方法一,传统做法
/*var item1 = document.getElementById("goSomewhere");
var item2 = document.getElementById("doSomething");
var item3 = document.getElementById("sayHi");
EventUtil.addHandler(item1,"click",function(e){
location.href = "http://www.baidu.com";
});
EventUtil.addHandler(item2,"click",function(e){
document.title = "I changed the title";
});
EventUtil.addHandler(item3,"click",function(e){
alert("say hi");
});*/
//方法二,事件委托
var nav = document.getElementById("myLinks");
nav.onclick = function(e){
e = e || window.event;
var target = e.target || e.srcElement;
//获取每个LI元素的内容
//http://www.2cto.com/kf/201304/204581.html
//http://www.cnblogs.com/rubylouvre/archive/2009/08/09/1542174.html
/*if(target.tagName == "LI"){
alert(target.innerHTML);
}*/
//事件委托
switch(target.id){
case "goSomewhere":
location.href = "http://www.baidu.com";
break;
case "doSomething":
document.title = "I changed the title";
break;
case "sayHi":
alert("say hi");
break;
}
}
</script>
<div id="evt">绑定多个事件</div>
<script>
var item = document.getElementById("evt");
item.addEventListener("click",function(){
alert("first");
},false);
item.addEventListener("click",function(){
alert("second");
},false);
</script>
javascript事件委托,事件代理,元素绑定多个事件之练习篇的更多相关文章
- 一个DOM元素绑定多个事件时,先执行冒泡还是捕获
绑定在被点击元素的事件是按照代码顺序发生,其他元素通过冒泡或者捕获“感知”的事件,按照W3C的标准,先发生捕获事件,后发生冒泡事件.所有事件的顺序是:其他元素捕获阶段事件 -> 本元素代码顺序事 ...
- Js 事件委托 解决动态元素不能click点击的问题
参考教程地址 https://blog.csdn.net/xiaolong20081/article/details/79792137 不想写了.直接看上面就行 采用事件委托或代理方式绑定 $(doc ...
- 父元素a标签的href默认行为以及子元素绑定的click事件的响应之间存在影响
原文地址 背景 开发过程中遇到问题,简单写个demo 运行环境为Chrome 68 描述一下这个问题,当a标签内部存在嵌套时, 父元素a标签的href默认行为以及子元素绑定的click事件的响应之间存 ...
- JS事件调试 - 查找HTML元素绑定的事件以及绑定代码所在位置
日常的网页开发调试工作中,经常需要知道指定的某个网页元素绑定了哪些事件以及绑定代码的位置,下面介绍三种用来跟踪页面中的事件的方法. 1.使用firefox调试 我们可以使用firefox的debug工 ...
- jq给同一元素绑定多个事件
$(".aa").on("click",function(){ alert(1) }).on("mousemove",function(){ ...
- 事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流
一.事件冒泡定义 事件冒泡是指在一个对象触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那 ...
- 浏览器中开发人员工具快速找到dom元素绑定那些JS事件
在web开发过程中难免会遇到让程序员去修改一些js代码东西,例如js的ajax和php等语言的交互等,在这其中你不得不了解点js的事件触发,且随着js的盛行各种插件的事件让程序员眼花缭乱,所以借助一个 ...
- JS事件委托(代理)学习笔记
在开始之前我们先来熟悉一下HTML DOM addEventListener()方法,该方法用于向指定元素添加事件句柄.语法说明如下图所示: 主要想强调一下第三个参数useCapture,默认值为fa ...
- html如何点击子元素事件而不触发父元素的点击事件——阻止冒泡
如果子元素和父元素都有点击事件,会出现点击事件冒泡的情况. 1.如何避免冒泡: html: <html> <head></head> <body> &l ...
随机推荐
- ios7禁止默认划动返回
self.navigationController.interactivePopGestureRecognizer.enabled = NO; 或 在使用之前先要判断是否ios7,不然会导致crash ...
- 基于visual Studio2013解决算法导论之053图的邻接表表示
题目 图的邻接表表示 解决代码及点评 // 图的邻接表表示.cpp : 定义控制台应用程序的入口点. // #include <iostream> #include <sta ...
- Shell脚本编程具体解释
第12章 Shell脚本编程 l Shell命令行的执行 l 编写.改动权限和运行Shell程序的步骤 l 在Shell程序中使用參数和变量 l 表达式比較.循环结构语句和条件结构语句 l ...
- 死锁 android ANR
以下为一段ANR的LOG,主要是在WindowManagerService.java和ActivityManagerService.java中实现. W/WindowManager( 2183): K ...
- 多个线程怎样操作同一个epoll fd
自己曾经做一个接口server时候,这样的场景下我的设计是多个线程操作同一个epoll fd.彼时,我的理由是epoll的系列函数是线程安全的. 当然有人不理解为什么会有多个线程操作同一个epoll ...
- SecureCRT辅助解决方案
SecureCRT辅助解决方案 1. 下载SecureCRT 7.3版本并激活: 2. SecureCRT linux配色方案: 3. SecureCRT设置log保存方案: 1. secureCRT ...
- BZOJ 3367: [Usaco2004 Feb]The Big Game 球赛( dp )
dp(i)表示前i个人最少坐多少辆车, dp(i) = min(dp(j) + 1, dp(i)) (0 <= j < i 且 (i, j]的人能坐在一辆车上) 时间复杂度O(n²) -- ...
- 一天一个类,一点也不累之HashSet
最近忙着一个小项目结题,故没能按时完成[一天一个类,一点也不累],还好项目优秀,算是对自己一点点的安慰和鼓励.~~~ 今天要说的是HashSet 既然是继承自Set,那么就必须有Set的一些属性,比如 ...
- IOS Notification 通知中心
1. 通知中心概述 通知中心实际上是在程序内部提供了消息广播的一种机制.通知中心不能在进程间进行通信.实际上就是一个二传手,把接收到的消息,根据内部的一个消息转发表,来将消息转发给需要的对象. ...
- MySQL 修改字段类型或长度
mysql> alter table 表名 modify column 字段名 类型;例如 数据库中address表 city字段是varchar(30) 修改类型可以用(谨慎修改类型,可能会导 ...