JS——事件的绑定与解绑
1、绑定形式
ele.addEventListener(evtName, fn)
ele["on" + evtName] = function () {}
ele.onclick = function () {}
2、addEventListener:事件监听器。 原事件被执行的时候,后面绑定的事件照样被执行,不会被层叠掉
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<button>绑定事件</button>
<script>
var btnEle = document.getElementsByTagName("button")[0];
bindEvt2(btnEle, "click", fn1);
bindEvt2(btnEle, "click", fn2); function fn1() {
console.log("你是美丽的人");
} function fn2() {
console.log("你是个坏人");
} function bindEvt2(ele, evtName, fn) {
ele.addEventListener(evtName, fn);
}
</script>
</body>
</html>
//九尺龙泉万卷书,上天生我意何如。
//不能报国平天下,枉为男儿大丈夫。
注意事项:ele["on" + evtName]与ele.onclick绑定的方式会层叠到之前的事件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<button>点击</button>
<script>
var btn=document.getElementsByTagName("button")[0];
btn.onclick=function () {
console.log("你是美人");
}
btn["onclick"]=function () {
console.log("谢谢呀");
}
</script>
</body>
</html>
//谢谢呀
3、addEventListener原理:之所以可以不层叠之前注册事件,主要是判断之前是否注册了此类事件,如果注册了就先执行此事件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<button>点击</button>
<script>
var btn = document.getElementsByTagName("button")[0];
btn.onclick = function () {
console.log("你是美人");
}
addEvent(btn, "click", fn); function addEvent(ele, evtName, fn) {
var oldEvnet = ele["on" + evtName];//如果进入绑定事件本身,那么该事件已经本绑定了,所以获取旧的事件必须在新的事件绑定之前
ele["on" + evtName] = function () {
//如果没有被定义过事件该事件源的该事件属性应该是null对应的boolean值是false
//如果已经定义过事件该事件源的该事件属性应该是function本身对应的boolean值是true
if (oldEvnet) {
oldEvnet();//因为oldEvent本身他就是函数本身,那么后面加一个();就是执行函数
fn();
}
else {
fn();
}
}
} function fn() {
console.log("谢谢呀")
}
</script>
</body>
</html>
//你是美人
//谢谢呀
4、事件绑定的兼容写法
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<button>赋诗</button>
<script>
var btn = document.getElementsByTagName("button")[0]; // 火狐谷歌IE9+支持addEventListener
// btn.addEventListener("click",fn1);
// btn.addEventListener("click",fn2); // IE678支持attachEvent
// btn.attachEvent("onclick",fn1);
// btn.attachEvent("onclick",fn2); //兼容写法
EventListen = {
addEvent: function (ele,fn,str) {
//通过判断调用的方式兼容IE678
//判断浏览器是否支持该方法,如果支持那么调用,如果不支持换其他方法
if(ele.addEventListener){
//直接调用
ele.addEventListener(str,fn);
}else if(ele.attachEvent){
ele.attachEvent("on"+str,fn);
}else{
//在addEventListener和attachEvent都不存在的情况下,用此代码
ele["on"+str] = fn;
}
}
} EventListen.addEvent(btn,fn1,"click")
EventListen.addEvent(btn,fn2,"click") function fn1(){
console.log("九尺龙泉万卷书,上天生我意何如。");
}
function fn2(){
console.log("不能报国平天下,枉为男儿大丈夫。");
} </script>
</body>
</html>
//九尺龙泉万卷书,上天生我意何如。
//不能报国平天下,枉为男儿大丈夫。
5、事件解绑方式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<button>点击</button>
<script>
var btn = document.getElementsByTagName("button")[0];
btn.onclick = function () {
console.log("你是美人");
}
btn.onclick = null;
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<button>赋诗</button>
<script>
var btn = document.getElementsByTagName("button")[0];
EventListen = {
addEvent: function (ele, fn, str) {
//通过判断调用的方式兼容IE678
//判断浏览器是否支持该方法,如果支持那么调用,如果不支持换其他方法
if (ele.addEventListener) {
//直接调用
ele.addEventListener(str, fn);
} else if (ele.attachEvent) {
ele.attachEvent("on" + str, fn);
} else {
//在addEventListener和attachEvent都不存在的情况下,用此代码
ele["on" + str] = fn;
}
},
removeEvent: function (ele, fn, str) {
if (ele.removeEventListener) {
ele.removeEventListener(str, fn);
} else if (ele.detachEvent) {
ele.detachEvent("on" + str, fn);
} else {
ele["on" + str] = null;
}
}
}
EventListen.addEvent(btn, fn, "click");
EventListen.removeEvent(btn, fn, "click"); function fn() {
alert(1);
}
</script>
</body>
</html>
注意事项:ele.onclick只能用ele.onclick=null,removeEvent只能解绑addEventListener,detachEvent只能解绑attachEvent。
JS——事件的绑定与解绑的更多相关文章
- jquery中事件重复绑定以及解绑问题
一般的情况下,对于这种情况,我们常规的思路是,先解绑,再绑定,如下: $(selector).unbind('click').bind('click',function(){....}); 当这样会有 ...
- Vue学习之--------组件自定义事件(绑定、解绑)(2022/8/21)
文章目录 1.基础知识 2.代码实例 2.1 App.vue 2.2 school.vue 2.3 student.vue 3.测试效果(略) 4.实际应用(在组件化编码实战三的基础上改进) 4.1 ...
- jQuery事件绑定、解绑、命名空间
jQuery事件绑定.解绑.命名空间 <%@ page language="java" import="java.util.*" pageEncoding ...
- React事件绑定与解绑
React中事件分类 React中事件绑定分为两种: 1.直接添加在React元素上的事件,这是React在基于Virtual DOM的基础上实现的符合w3c规范的合成事件(SyntheticEven ...
- 兼容8事件绑定与解绑addEventListener、removeEventListener和ie的attachEvent、detachEvent
兼容8事件绑定与解绑addEventListener.removeEventListener和ie的attachEvent.detachEvent ;(function(){ // 事件绑定 bi ...
- jquery 事件的绑定,触发和解绑
js和jquery绑定的区别? HTML或原生js是单一对应绑定的,绑多了只留最后一个.jQuery是追加绑定的,绑多少执行多少.这个在每一本jQuery的书中都是首先提到的事情. jquery绑定与 ...
- Service的启动与停止、绑定与解绑
---恢复内容开始--- Service的意义就在于当软件停止之后还可以在背景中进行运行,换句话也就是说,比如一个音乐播放器,当我们退出音乐播放器的时候,还是希望它在背景中运行,也就是一直播放着音乐, ...
- 从零开始学 Web 之 DOM(六)为元素绑定与解绑事件
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... +-------------------------------------------------------- ...
- 使用JavaScript动态的绑定、解绑 a 标签的onclick事件,防止重复点击
页面上的 a 标签如下: <a class="more" style="cursor: pointer;" id="commentMore&qu ...
随机推荐
- Jquery 实现表单提交按钮变灰,防止多次点击提交重复数据
表单提交时候我们应该控制提交按钮,不能点击多次进行数据的重复提交.要不然就会有冗余的重复的数据在系统中,造成系统出现数据垃圾.jQuery很简单的就可以实现对表单提交按钮控制,下面就是相关的例子和代码 ...
- 校长的收藏(洛谷 U4534)
题目背景 XS中学的校长喜欢收集手办,家里面都是价值不菲的手办. 校长喜欢给手办们排队并且对于某些些区间内的手办喜爱有加. 现在,校长外出散步(找乐子),你潜入他的房间打算借(偷走)他的手办炫耀一下. ...
- 【ZJOI2017 Round2练习】
………………………………………………………………………… DAY1:听说是湖南的题 T1:spaly?毫无想法,写个暴力压压惊 T2:尼克杨问号脸 T3:FFT我不会啊,70points已经尽力了
- MVC WebApi 将返回值改为JSON格式
新增一个类: public class BrowserJsonFormatter : JsonMediaTypeFormatter { public BrowserJsonFormatter() { ...
- VS2017-NetCore项目整合Log4Net
1新建NetCore项目,我这里NetCoreSDK版本是2.2.0. 2.进入NuGet程序包官网 : https://www.nuget.org,搜索以下两个包并安装到项目中. Microsoft ...
- what happens if we dont resolve or reject the promise
https://stackoverflow.com/questions/36734900/what-happens-if-we-dont-resolve-or-reject-the-promise I ...
- CentOS和Window互相远程桌面方法
1)VNC服务器配置 (CentOS 5.x安装GNOME桌面环境) # yum groupinstall "GNOME Desktop Environment(CentOS 6.x安装G ...
- JavaScript解析顺序和变量作用域
JavaScript基础之变量作用域. 一. 1.全局变量:全局变量的意思就是,在代码的不论什么地方都能够訪问到.注意:未定义 直接赋值的变量拥有全局属性. 2.局部变量:局部变量的意思就是,变量的作 ...
- 数据结构之中序遍历转兴许遍历(JAVA实现)(二)
算法流程: 主要分为四步: 1.当前字符为数字或者字母,则直接输出 2.当前字符为).则在栈中匹配输出.一直匹配到),则停止输出(就是将)及其顶上的元素所有弹出来输出) 3.当前字符为操作符.则比較当 ...
- swift 2.0 语法 数组
import UIKit /*: 数组 * 格式 var arr:[Int] = [数值1, 数值2, 数值3] * 不可变数组 let == NSArray * 可变数组 var */ l ...