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 相关文章推荐
js查找父节点的简单方法
Jun 28 Javascript
javascript写的一个链表实现代码
Oct 25 Javascript
js中小数转换整数的方法
Jan 26 Javascript
get(0).tagName获得作用标签示例代码
Oct 08 Javascript
手动初始化Angular的模块与控制器
Dec 26 Javascript
AngularJs 利用百度地图API 定位当前位置 获取地址信息
Jan 18 Javascript
利用JS实现简单的瀑布流加载图片效果
Apr 22 Javascript
angular2实现统一的http请求头方法
Aug 13 Javascript
Vue服务端渲染实践之Web应用首屏耗时最优化方案
Mar 22 Javascript
Fetch超时设置与终止请求详解
May 18 Javascript
JS简易计算器实例讲解
Jun 30 Javascript
JS轻量级函数式编程实现XDM二
Jun 16 Javascript
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
用PHP4访问Oracle815
2006/10/09 PHP
php开发环境配置记录
2011/01/14 PHP
深入apache host的配置详解
2013/06/09 PHP
PHP遍历某个目录下的所有文件和子文件夹的实现代码
2013/06/28 PHP
PHP有序表查找之二分查找(折半查找)算法示例
2018/02/09 PHP
让网页根据不同IE版本显示不同的内容
2009/02/08 Javascript
js multiple全选与取消全选实现代码
2012/12/04 Javascript
JavaScript操纵窗口的方法小结
2013/06/28 Javascript
浅析document.ready和window.onload的区别讲解
2013/12/18 Javascript
每天一篇javascript学习小结(属性定义方法)
2015/11/19 Javascript
利用ES6语法重构React组件详解
2017/03/02 Javascript
使用jQuery ajaxupload插件实现无刷新上传文件
2017/04/23 jQuery
Node.js上传文件功能之服务端如何获取文件上传进度
2018/02/05 Javascript
vue实现手机号码的校验实例代码(防抖函数的应用场景)
2019/09/05 Javascript
js+canvas绘制图形验证码
2020/09/21 Javascript
[01:58]2018DOTA2亚洲邀请赛趣味视频——交流
2018/04/03 DOTA
用python实现批量重命名文件的代码
2012/05/25 Python
图文详解WinPE下安装Python
2016/05/17 Python
详解python的几种标准输出重定向方式
2016/08/15 Python
python实现批量注册网站用户的示例
2019/02/22 Python
Python中的pathlib.Path为什么不继承str详解
2019/06/23 Python
通过python改变图片特定区域的颜色详解
2019/07/15 Python
Eastbay官网:美国最大的运动鞋网络零售商
2016/07/27 全球购物
英国第一豪华护肤品牌:Elemis
2017/10/12 全球购物
MIKI HOUSE美国官方网上商店:日本领先的婴儿和儿童高级时装品牌
2020/06/21 全球购物
华为python面试题
2016/05/03 面试题
大专生自我鉴定范文
2013/10/01 职场文书
公司薪酬管理制度
2014/01/31 职场文书
广播体操比赛口号
2014/06/10 职场文书
人事专员岗位说明书
2014/07/29 职场文书
党的群众路线教育实践活动批评与自我批评发言稿
2014/10/16 职场文书
2014年医院科室工作总结
2014/12/20 职场文书
2019年中学生的思想品德评语集锦
2019/12/19 职场文书
mysql 如何获取两个集合的交集/差集/并集
2021/06/08 MySQL
Java实现字符串转为驼峰格式的方法详解
2022/07/07 Java/Android
Windows server 2003卸载和安装IIS的图文教程
2022/07/15 Servers