JavaScript中利用jQuery绑定事件的几种方式小结


Posted in Javascript onMarch 06, 2016

开发过程中经常要给DOM元素添加一些事件,下面介绍几种方式:

先写几个好看的button

//引入JQuery
<script type="text/javascript" src="jquery-1.8.3.min.js"></script>
<span id="tips"></span>
<input type="button" id="btn1" value="OK1" onclick="alert('hello btn1');">
<input type="button" id="btn2" value="OK2" click-type="listener">
<input type="button" id="btn3" value="OK3" click-type="listener">
<input type="button" id="btn4" value="OK4">
<input type="button" id="btn5" value="OK5">
<div id="btn-list">
<input type="button" id="btn6" value="OK6">
<input type="button" id="btn7" value="OK7">
</div>

效果如下:

JavaScript中利用jQuery绑定事件的几种方式小结

1、直接在btn1使用onclick,这种方式称为内联事件,简单粗暴,好处是可以清晰地看到button绑定了click事件;这种方式等同于:(element).onclick;

这种方式的缺点,一个元素只能指定一个内联事件,添加了这段代码之后会发现onclick="alert('hello btn1');"被覆盖了:

(function(){
  var _btn1 = document.getElementById('btn1'),
    _tips = document.getElementById('tips');
    _btn1.onclick=function(){
      _tips.innerHTML='hello world~';
    };
     
})();

2、使用原生JS给多个元素绑定事件,在 IE 9 之前的版本中,需要使用 attachEvent替代addEventListener

(function(){
  var _btns=document.querySelectorAll("[click-type=listener]"), i = 0, len = _btns.length;
     for (i; i < len; ++i) {
      var _btn=_btns[i];
      _btn.addEventListener("click", function (evt) {
        var target = evt.target
        alert('hello '+target.id);
      });
    }
 
})();

3、第二种方式逻辑比较简单,逼格会高一点,但是代码量比较多,而且还需要考虑IE的兼容性问题,由于我们的项目一般都会使用到JQuery,所以就可以这样写了:

$("#btn4").click(function(){
  alert("hello btn4");
});
 
$("#btn5").on("click",function(){
  alert("hello btn5");
});

上面使用到的on和bind方法效果是一样的;

4、使用on,给多个元素绑定一个或多个事件:

$("#btn-list").on("click","input",function(evt){
  alert("hello "+ evt.target.id);
});

这是我现在在开发中最常用的一种方法,有个好处,举个栗子:

/*动态添加几个button*/
(function(){
  for(var i=8;i<10;i++){
    $("#btn-list").append("<input type='button' id='btn"+i+"' value='OK"+i+"'>");
  }
})();

这样动态添加元素的时候可以自动添加click事件,比如我们经常使用AJAX加载一些数据动态添加到页面上,这样就简单多了。

另外:使用原生JS利用事件委托实现也比较简单,

<ul id='list'>
  <li>css</li>
  <li>js</li>
  <li>html</li>
</ul>

(function(){
  var a=document.getElementById('list');
    a.addEventListener('click',function(e){
    var b = e.target; 
    alert(b.innerHTML);
  },false);
})();

Javascript 相关文章推荐
jQuery 页面载入进度条实现代码
Feb 08 Javascript
AJAX使用了UpdatePanel后无法使用alert弹出脚本
Apr 02 Javascript
超轻量级的基于jquery的三级展开列表
Apr 26 Javascript
基于jquery实现一张图片点击鼠标放大再点缩小
Sep 29 Javascript
使用javascript实现监控视频播放并打印日志
Jan 05 Javascript
javascript 闭包详解
Feb 15 Javascript
javascript实现随时变化着的背景颜色
Apr 02 Javascript
jQuery实现标题有打字效果的焦点图代码
Nov 16 Javascript
JS实现带动画的回到顶部效果
Dec 28 Javascript
TypeScript基础入门教程之三重斜线指令详解
Oct 22 Javascript
基于vue与element实现创建试卷相关功能(实例代码)
Dec 07 Vue.js
VUE中鼠标滚轮使div左右滚动的方法详解
Dec 14 Vue.js
Node.js模块封装及使用方法
Mar 06 #Javascript
JavaScript中三种异步上传文件方式
Mar 06 #Javascript
JavaScript中获取纯正的undefined的方法
Mar 06 #Javascript
JS面向对象编程详解
Mar 06 #Javascript
深入学习JavaScript的AngularJS框架中指令的使用方法
Mar 05 #Javascript
使用Jasmine和Karma对AngularJS页面程序进行测试
Mar 05 #Javascript
JavaScript的React框架中的JSX语法学习入门教程
Mar 05 #Javascript
You might like
php文件读取方法实例分析
2015/06/20 PHP
php+ajax无刷新上传图片的实现方法
2016/12/06 PHP
防止页面被iframe(兼容IE,Firefox火狐)
2010/07/04 Javascript
JS Date函数整理方便使用
2013/10/23 Javascript
让浏览器DOM元素最后加载的js方法
2014/07/29 Javascript
JS实现的左侧竖向滑动菜单效果代码
2015/10/19 Javascript
jQuery的文档处理程序详解
2016/05/10 Javascript
JavaScript中对JSON对象的基本操作示例
2016/05/21 Javascript
基于Bootstrap和jQuery构建前端分页工具实例代码
2016/11/23 Javascript
jquery插件canvaspercent.js实现百分比圆饼效果
2017/07/18 jQuery
解决vue页面DOM操作不生效的问题
2018/03/17 Javascript
页面内锚点定位及跳转方法总结(推荐)
2019/04/24 Javascript
在Vue项目中,防止页面被缩放和放大示例
2019/10/28 Javascript
vue移动端使用appClound拉起支付宝支付的实现方法
2019/11/21 Javascript
在vue中获取wangeditor的html和text的操作
2020/10/23 Javascript
[06:59]DOTA2-DPC中国联赛3月7日Recap集锦
2021/03/11 DOTA
python服务器端收发请求的实现代码
2014/09/29 Python
Python列表计数及插入实例
2014/12/17 Python
Python简单的制作图片验证码实例
2017/05/31 Python
Python实现的简单模板引擎功能示例
2017/09/02 Python
简单了解什么是神经网络
2017/12/23 Python
对numpy 数组和矩阵的乘法的进一步理解
2018/04/04 Python
Python中pandas dataframe删除一行或一列:drop函数详解
2018/07/03 Python
Python 通过正则表达式快速获取电影的下载地址
2020/08/17 Python
wordpress添加Html5的表单验证required方法小结
2020/08/18 HTML / CSS
LN-CC中国:高端男装和女装的奢侈时尚目的地
2019/09/14 全球购物
我能否用void** 指针作为参数, 使函数按引用接受一般指针
2013/02/16 面试题
大学生职业生涯规划书的基本内容
2014/01/06 职场文书
银行工作检查书范文
2014/01/31 职场文书
内蒙古鄂尔多斯市市长寄语
2014/04/10 职场文书
人事文员岗位职责
2015/02/04 职场文书
病假条格式范文
2015/08/17 职场文书
大学学生会主席竞选稿怎么写?
2019/08/19 职场文书
导游词之山西祁县乔家大院
2019/10/14 职场文书
Python图像处理之图像拼接
2021/04/28 Python
Golang 语言控制并发 Goroutine的方法
2021/06/30 Golang