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 相关文章推荐
关于__defineGetter__ 和__defineSetter__的说明
May 12 Javascript
在Linux上用forever实现Node.js项目自启动
Jul 09 Javascript
用js判断是否为360浏览器的实现代码
Jan 15 Javascript
jQuery中常用的遍历函数用法实例总结
Sep 01 Javascript
js代码实现点击按钮出现60秒倒计时
Jan 28 Javascript
JavaScript操作class和style样式代码详解
Feb 13 Javascript
Angular JS 生成动态二维码的方法
Feb 23 Javascript
jQuery鼠标悬停内容动画切换效果
Apr 27 jQuery
基于Bootstrap模态对话框只加载一次 remote 数据的解决方法
Jul 09 Javascript
jQuery实现表单动态添加与删除数据操作示例
Jul 03 jQuery
Node.js原生api搭建web服务器的方法步骤
Feb 15 Javascript
茶余饭后聊聊Vue3.0响应式数据那些事儿
Oct 30 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
php 缓存函数代码
2008/08/27 PHP
PHP中mysqli_affected_rows作用行数返回值分析
2014/12/26 PHP
PHP的数组中提高元素查找与元素去重的效率的技巧解析
2016/03/03 PHP
PHP FileSystem 文件系统常用api整理总结
2019/07/12 PHP
Lazy Load 延迟加载图片的 jQuery 插件
2010/02/06 Javascript
javascript实现促销倒计时+fixed固定在底部
2013/09/18 Javascript
javascript中定义类的方法汇总
2014/12/28 Javascript
jQuery增加、删除及修改select option的方法
2016/08/19 Javascript
jQuery实现简洁的轮播图效果实例
2016/09/07 Javascript
学习vue.js中class与style绑定
2016/12/03 Javascript
JS实现HTML标签转义及反转义
2020/04/14 Javascript
详解Js中的模块化是如何实现的
2017/10/18 Javascript
详解Vue中使用Echarts的两种方式
2018/07/03 Javascript
vue-cli的工程模板与构建工具详解
2018/09/27 Javascript
Vue项目实现换肤功能的一种方案分析
2019/08/28 Javascript
Vue 2.0双向绑定原理的实现方法
2019/10/23 Javascript
基于axios 的responseType类型的设置方法
2019/10/29 Javascript
基于jQuery实现可编辑的表格
2019/12/11 jQuery
python之wxPython应用实例
2014/09/28 Python
简单介绍Python的Django框架加载模版的方式
2015/07/20 Python
Python 装饰器使用详解
2017/07/29 Python
用Python实现数据的透视表的方法
2018/11/16 Python
使用python3实现操作串口详解
2019/01/01 Python
详解python读取image
2019/04/03 Python
python并发编程 Process对象的其他属性方法join方法详解
2019/08/20 Python
python对批量WAV音频进行等长分割的方法实现
2020/09/25 Python
使用CSS实现阅读进度条
2017/02/27 HTML / CSS
世界上最全面的草药补充剂和顶级品牌维生素网站:HerbsPro
2019/01/20 全球购物
BAILEY 44官网:美国制造的女性服装
2019/07/01 全球购物
DERMAdoctor官网:美国著名皮肤护理品牌
2019/07/06 全球购物
个人简历的自荐信
2013/10/23 职场文书
服装促销活动方案
2014/02/23 职场文书
公司法人授权委托书范本
2014/09/12 职场文书
民间借贷协议书范本
2014/10/01 职场文书
学习党章心得体会2016
2016/01/15 职场文书
Nginx 安装SSL证书完成HTTPS部署
2022/04/28 Servers