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 相关文章推荐
基于node.js的快速开发透明代理
Dec 25 Javascript
jquery利用event.which方法获取键盘输入值的代码
Oct 09 Javascript
原生js实现改变随意改变div属性style的名称和值的结果
Sep 26 Javascript
利用JavaScript脚本实现滚屏效果的方法
Jul 07 Javascript
javascript数组随机排序实例分析
Jul 22 Javascript
jquery带下拉菜单和焦点图代码分享
Aug 24 Javascript
JavaScript中的时间处理小结
Feb 24 Javascript
Vue.js:使用Vue-Router 2实现路由功能介绍
Feb 22 Javascript
浅谈jQuery的bind和unbind事件(绑定和解绑事件)
Mar 02 Javascript
react router4+redux实现路由权限控制的方法
May 03 Javascript
js时间转换毫秒的实例代码
Aug 21 Javascript
谈谈node.js中的模块系统
Sep 01 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开发中常用的三个表单验证函数使用小结
2010/03/03 PHP
深入浅析yii2-gii自定义模板的方法
2016/04/26 PHP
javascript与有限状态机详解
2014/05/08 Javascript
Javascript学习笔记之数组的遍历和 length 属性
2014/11/23 Javascript
使用jQuery.form.js/springmvc框架实现文件上传功能
2016/05/12 Javascript
artDialog+plupload实现多文件上传
2016/07/19 Javascript
javascript中异常处理案例(推荐)
2016/10/03 Javascript
js实现倒计时及时间对象
2016/11/15 Javascript
ES6中module模块化开发实例浅析
2017/04/06 Javascript
node.js中EJS 模板快速入门教程
2017/05/08 Javascript
详解基于vue-cli配置移动端自适应
2018/01/13 Javascript
vue采用EventBus实现跨组件通信及注意事项小结
2018/06/14 Javascript
Vue唯一可以更改vuex实例中state数据状态的属性对象Mutation的讲解
2019/01/18 Javascript
小程序开发中如何使用async-await并封装公共异步请求的方法
2019/01/20 Javascript
vue实现配置全局访问路径头(axios)
2019/11/01 Javascript
解决vue单页面 回退页面 keeplive 缓存问题
2020/07/22 Javascript
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
2016/06/14 Python
Python 实现简单的shell sed替换功能(实例讲解)
2017/09/29 Python
对python中raw_input()和input()的用法详解
2018/04/22 Python
解决python3运行selenium下HTMLTestRunner报错的问题
2018/12/27 Python
django API 中接口的互相调用实例
2020/04/01 Python
浅析移动设备HTML5页面布局
2015/12/01 HTML / CSS
Levi’s美国官网:美国著名的牛仔裤品牌
2016/08/19 全球购物
英国最大的专业户外零售商:Mountain Warehouse
2018/06/06 全球购物
公司清洁工岗位职责
2013/12/14 职场文书
销售人员职业生涯规划范文
2014/03/01 职场文书
体育教师求职信
2014/05/24 职场文书
文明礼仪标语
2014/06/13 职场文书
群众路线教育党员自我剖析材料
2014/10/06 职场文书
企业年检委托书范本
2014/10/14 职场文书
邀请函怎么写
2015/01/30 职场文书
党员干部廉政承诺书
2015/04/28 职场文书
2015年路政工作总结
2015/05/22 职场文书
2015年乡镇纪委工作总结
2015/05/26 职场文书
2016年中秋节慰问信
2015/12/01 职场文书
Java设计模式之享元模式示例详解
2022/03/03 Java/Android