博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
事件绑定的几种常见方式
阅读量:6235 次
发布时间:2019-06-22

本文共 2119 字,大约阅读时间需要 7 分钟。

在项目开发中,经常遇到绑定事件不起作用,或者事件绑定多次,导致重复触发。

1.事件绑定的几种常见方式(以click事件为例)

jquery:

  $(selector).click(function(){...})

  $(selector).bind("click",function(){...})

  $(selector).live("click",function(){...})

  $(document).delegate("selector","click",function(){...})

$(selector).on("click",function(){...})

  虽然有以上四种基本方式绑定,但无论你用哪一种,底层实现都是由on事件绑定完成,唯一的区别就是书写方便和个人习惯而已。

  bind方法

  会给每一个符合selector的元素添加click执行函数,即:将click事件绑定到所有设置了的selector元素上,如果动态添加了元素,之前绑定事件也起作用

  live方法

  将事件绑定在document上,所有事件触发冒泡到根节点document的时候,判断是否为click事件、并且是否为selector元素都符合则执行事件函数

  delegate方法

  原理上delegate方法和live方法很类似,都是传递选择器和执行函数两个参数到document上判断,

$(document).delegate("selector","click",function(){...})

  约等于

$("selector").live("click",function(){...})

[注意:live事件,jQuery 1.7以后版本使用on代替live,且移动设备safari浏览器不支持live事件]

【穿插解决方案:

移动设备safari浏览器不支持live事件

方法一:

首先要给绑定click事件的元素加上样式:cursor: pointer;

然后再用live绑定事件

$('selector').live('click', function() {alert('你点我了'); })

 

如果方法一对你无效,你也可以用

方法二:

同样也给绑定click事件的元素加上样式:cursor: pointer;

然后用on来绑定事件,jquery1.7后推荐用on来动态绑定事件,因为比live更高效

$(document).on('click', 'selector', function() {            alert('你点我了');        });

】  

唯一的区别在于delegate的性能会比live稍好一些,因为live方法需要遍历整个dom去查selectordelegate只需要监测document就够了,想要更深入了解可以自己去网上查阅下。

  on方法

  on的绑定原理和bind差不多,但是on在性能上占优势。

2.事件重复绑定的可能原因

  大量使用ajax

  将所有事件写在一个大方法里,如:

  var clickEvent = function(){

    $(a).bind(...);

    $(b).bind(...);

  }

  在大量使用ajax时,为了触发事件会在success里调用clickEvent方法,然后由于其他地方需要触发同样的事件又会调用clickEvent,这样很容易导致多次触发。

  解决方案:避免这样使用

   嵌套元素的事件冒泡

  解决方案:

  e.preventDefault()//阻止默认

      e.stoppropagation()//阻止冒泡

   频繁使用trigger函数

  可能有时候的需求需要触发某个特定事件,这时我们会想当然使用trigger触发事件,但是却没有考虑到带来的隐患。尤其是一个事件去trigger另一个事件

解决方案:阻止事件冒泡,见上,

  或者使用triggerhandler(慎用,不支持chrome貌似)

Javascript事件绑定的几种方式

buttonClick事件为例:

function clickBtn() {    alert('click!');}

1、直接在元素上绑定回调函数 <button id="btn" οnclick="clickBtn()">click me</button>

2JS获取DOM元素对象后,对onclick属性赋值,绑定事件:        document.getElementById('btn').οnclick=clickBtn;

3JS获取DOM对象后,调用对象的addEventListener函数绑定事件:document.getElementById('btn').addEventListener('click',clickBtn);

 

现阶段主流浏览器兼容的绑定事件方式就这3

转载于:https://www.cnblogs.com/beileixinqing/p/6503660.html

你可能感兴趣的文章
后端技术体系框架
查看>>
下面这段java的源代码的意思
查看>>
Spring Boot 整合 Mybatis 实现 Druid 多数据源详解
查看>>
摄像头驱动OV7725学习笔记连载(一):OV7725 电器特性和时序图
查看>>
IIS Express允许外部访问(外部调试)
查看>>
NSSet NSMutableSet的简单使用
查看>>
洛谷P1085不高兴的津津
查看>>
所有的企业都拥抱了互联网,云才有价值,用云计算的本质是用互联网。互联网企业需要满足两个特征,一是要有云计算,二是要在云计算的基础上用数据来优化业务。...
查看>>
阿里金融成立,从第一天开始,就使用阿里云的云计算平台作为运算淘宝和支付宝数据的计算后台。阿里小贷不需要抵押,纯信用贷款,目前已经能做到3分钟提交申请,1秒批准,0人工干预。数据成为新的信用。...
查看>>
0和1:裂变时刻-2.数据爆炸
查看>>
Python 核心编程(第二版)——模块
查看>>
6.08 PMO的生存挑战-这些企业的痛你遇到了吗?
查看>>
傻瓜式十分钟免费开启 HTTPS,是时候为你的站点加上小绿锁了
查看>>
[洛谷P3550][POI2013]TAK-Taxis
查看>>
作业6--超级无敌终结(冲刺二)
查看>>
判断日期格式是否正确
查看>>
解决windows8 FlashPlayer丢失无法安装的问题
查看>>
Python 高级编程技巧
查看>>
BZOJ1497:[NOI2006]最大获利(最大权闭合子图)
查看>>
BZOJ2179:FFT快速傅立叶(FFT)
查看>>