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 相关文章推荐
javascript学习笔记(七) js函数介绍
Jun 19 Javascript
基于javascript滚动图片具体实现
Nov 18 Javascript
js使用数组判断提交数据是否存在相同数据
Nov 27 Javascript
防止jQuery ajax Load使用缓存的方法小结
Feb 22 Javascript
jfreechart插件将数据展示成饼状图、柱状图和折线图
Apr 13 Javascript
javascript实现的固定位置悬浮窗口实例
Apr 30 Javascript
Vue实现简易翻页效果源码分享
Nov 08 Javascript
vue组件通信传值操作示例
Jan 08 Javascript
详解vue-video-player使用心得(兼容m3u8)
Aug 23 Javascript
Vue+elementUI实现多图片上传与回显功能(含回显后继续上传或删除)
Mar 23 Javascript
解决vue+webpack项目接口跨域出现的问题
Aug 10 Javascript
微信小程序自定义底部弹出框功能
Nov 18 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
AJAX for PHP简单表数据查询实例
2007/01/02 PHP
浅谈Eclipse PDT调试PHP程序
2014/06/09 PHP
php使用iconv中文截断问题的解决方法
2015/02/11 PHP
php实现留言板功能(代码详解)
2017/03/28 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
TP5框架实现自定义分页样式的方法示例
2020/04/05 PHP
javascript 实现字符串反转的三种方法
2013/11/23 Javascript
JS判断客户端是手机还是PC的2个代码
2014/04/12 Javascript
跟我学Nodejs(二)--- Node.js事件模块
2014/05/21 NodeJs
jQuery控制TR显示隐藏的三种常用方法
2014/08/21 Javascript
Javscript调用iframe框架页面中函数的方法
2014/11/01 Javascript
如何减少浏览器的reflow和repaint
2015/02/26 Javascript
JQuery控制radio选中和不选中方法总结
2015/04/15 Javascript
javascript判断图片是否加载完成的方法推荐
2016/05/13 Javascript
原生javascript 学习之js变量全面了解
2016/07/14 Javascript
JavaScript设计模式之单体模式全面解析
2016/09/09 Javascript
jQuery.ajax实现根据不同的Content-Type做出不同的响应
2016/11/03 Javascript
javascript防篡改对象实例详解
2017/04/10 Javascript
ES6新特性二:Iterator(遍历器)和for-of循环详解
2017/04/20 Javascript
Js利用console计算代码运行时间的方法示例
2017/09/24 Javascript
用Vue编写抽象组件的方法
2019/05/06 Javascript
vue-resource:jsonp请求百度搜索的接口示例
2019/11/09 Javascript
[36:41]完美世界DOTA2联赛循环赛FTD vs Magma第一场 10月30日
2020/10/31 DOTA
Python库urllib与urllib2主要区别分析
2014/07/13 Python
python处理PHP数组文本文件实例
2014/09/18 Python
深入解析Python中的descriptor描述器的作用及用法
2016/06/27 Python
Python语言描述连续子数组的最大和
2018/01/04 Python
python 找出list中最大或者最小几个数的索引方法
2018/10/30 Python
Python使用pandas和xlsxwriter读写xlsx文件的方法示例
2019/04/09 Python
pycharm中显示CSS提示的知识点总结
2019/07/29 Python
用Python调用win命令行提高工作效率的实例
2019/08/14 Python
python飞机大战pygame游戏框架搭建操作详解
2019/12/17 Python
python 提高开发效率的5个小技巧
2020/10/19 Python
海量信息软件测试笔试题
2015/08/08 面试题
集中采购方案
2014/06/10 职场文书
邀请函范文
2015/02/02 职场文书