详解jQuery中的事件


Posted in Javascript onDecember 14, 2016

大致介绍

jQuery增加了并扩展了基本的事件处理机制,不但提供了更加优雅的事件处理语法,而且极大地增强了事件处理能力

jQuery中的事件

详解jQuery中的事件

加载DOM

在jQuery中是用$(document).ready()方法来替代JavaScript中的window.onload方法的,但是他们也有一些不同点

1、执行时机

例如我们有一个有很多图片的网页

$(document).ready()方法是在这个网页的DOM树加载完就可以执行的,而window.onload方法必须在DOM树加载完和图片都加载完才执行

如果使用jQuery我们想要在整个页面加载完在执行可以使用load()方法

下面两段代码的功能是一样的

// jQuery
      $(window).load(function(){
        // 代码1
      });
      // JavaScript
      window.onload = function(){
        // 代码2
      };

2、多次使用

JavaScript的onload事件一次只能保存对一个函数的引用,而$(document).ready()可以保存多个

function one(){
        alert('1');
      }
      function two(){
        alert('2');
      }
      // JavaScript
      window.onload = one;
      window.onload = two;//只执行two()
      // jQuery
      $(document).ready(function(){
        one();
      });
      $(document).ready(function(){
        two();
      });//one() 和 two()都会执行

3、简写方式

$(document).ready(function(){});可以简写为$(function(){});

事件绑定

bind()函数的语法:bind(type,[.data],fn)

第一个参数是事件类型

第二个参数是可选参数,作为event.data属性值传递给事件对象的额外数据对象

第三个参数是用来绑定的处理函数

用例子来看,有两个div,第二个div隐藏,当我们点击第一个div时,第二个div显示

<div id="div1"></div>
  <div id="div2"></div>
  <script type="text/javascript">
  $(function(){
    $('#div1').bind('click',function(){
      $(this).next().show();
    });
    
  });

增加功能,当点击div1时如果div2是显示的,则隐藏它,否则就显示它

$(function(){
    $('#div1').bind('click',function(){
      if($(this).next().is(':visible')){
        $(this).next().hide();
      }else{
        $(this).next().show();
      }
    });
  });

简写:

$('#div1').click(function(){
      if($(this).next().is(':visible')){
         $(this).next().hide();
       }else{
         $(this).next().show();
       }
    })

合成事件

1、hover()方法

用于模拟光标悬停事件。当光标移动到元素上时触发第一个函数,当光标移出元素时,会触发第二个函数

$('#div1').hover(function(){
      $(this).next().show();
    },function(){
      $(this).next().hide();
    });

2、toggle()方法

用于模拟鼠标连续单击事件,当鼠标第一次点击元素,触发第一个函数,当鼠标点击同一个函数时触发第二个函数

$('#div1').toggle(function(){
  $(this).next().show();
},function(){
  $(this).next().hide();
});

阻止事件冒泡和阻止默认行为

1、阻止事件冒泡 

stopPropagation()方法

2、阻止默认行为

preventDefault()方法

注意:1、return false 在jQuery中是即阻止事件冒泡又阻止默认行为

 2、jQuery不支持事件捕获

事件对象的属性

1、event.type

 改方法的作用是获取到事件的类型

$('#div1').click(function(ev){
      alert(ev.type);//click
    })

2、event.target

获取到触发事件的元素

$('#div1').click(function(ev){
   alert(ev.target.id);//div1
  })

3、event.relatedTarget

获取相关元素

4、event.pageX和event.pageY

获取到光标相对于页面的x的坐标和y的坐标

$('#div1').click(function(ev){
   alert(ev.pageX + ',' + ev.pageY);//275,181
   })

5、event.which

该方法的作用是在鼠标单击事件中获取到鼠标的左、中、右键;在键盘事件中获取键盘的按键

$('#div1').click(function(ev){
 alert(ev.which);//1是鼠标左键,2是鼠标中见,3是鼠标右键
})

移除事件

 unbind()方法语法: unbind([type],[data]);

 第1个参数是事件类型,第2个参数是将要移除的函数

 看一个例子,为div1绑定如下事件

$('#div1').bind('click',function(){
      alert('1');
    }).bind('click',function(){
      alert('2');
    }).bind('mouseover',function(){
      alert('3');
    })

   1、如果没有参数,则删除所有绑定的事件

       $('#div1').unbind();//删除所有事件

    2、如果提供了事件类型作为参数,则只删除该类型的绑定事件

        $('#div1').unbind('mouseover');//删除mouseover事件

    3、如果把绑定时传递的处理函数作为第2个参数,则只有这个特定的时间处理函数会被删除

模拟操作

1、常用模拟

在jQuery中可以使用trigger()方法完成模拟操作,例如可以使用下面的代码来触发id为btn的按钮的click事件

$('#btn').trigger('click');

2、触发自定义事件

trigger()方法不仅能触发浏览器支持的具有相同名称的事件,也可以触发自定义名称的事件。

$('#btn').bind('myclick',function(){
  alert('1');
});
$('#btn').trigger('myclick');

3、传递数据

$('#btn').bind('myclick',function(event,message1,message2){
 alert(message1 + message2);
});
$('#btn').trigger('myclick',["1","2"]);

4、执行默认操作

$('input').trigger('focus');

以上代码会触发input元素的focus事件,也会使<input>元素本身得到焦点

如果只想触发<input>元素上绑定的特定事件,同时取消浏览器对此事件的默认操作可以使用triggerHandler()方法

其他用法

添加事件命名空间,便于管理

例如可以把元素绑定的多个事件类型用命名空间规范起来

$('div').bind('click.plugin',function(){
      alert('1');
    });
    $('div').bind('mouseover.plugin',function(){
      alert('2');
    });
    $('div').bind('dbclick.plugin',function(){
      alert('3');
    });
    $('button').click(function(){
      $('div').unbind('.plugin');
    })

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
Firebug入门指南(Firefox浏览器)
Aug 21 Javascript
从零开始学习jQuery (三) 管理jQuery包装集
Feb 23 Javascript
使用JS读秒使用示例
Sep 21 Javascript
js创建一个input数组并绑定click事件的方法
Jun 12 Javascript
ionic隐藏tabs的方法
Aug 29 Javascript
boostrapTable的refresh和refreshOptions区别浅析
Jan 22 Javascript
Bootstrap modal 多弹窗之叠加显示不出弹窗问题的解决方案
Feb 23 Javascript
ES6中Array.includes()函数的用法
Sep 20 Javascript
35个最好用的Vue开源库(史上最全)
Jan 03 Javascript
jquery简单实现纵向的无缝滚动代码实例
Apr 01 jQuery
浅谈Vue项目骨架屏注入实践
Aug 05 Javascript
vue项目中常见问题及解决方案(推荐)
Oct 21 Javascript
JS实现鼠标移上去显示图片或微信二维码
Dec 14 #Javascript
微信小程序 HTTPS报错整理常见问题及解决方案
Dec 14 #Javascript
node.js报错:Cannot find module 'ejs'的解决办法
Dec 14 #Javascript
原生JS获取元素集合的子元素宽度实例
Dec 14 #Javascript
微信小程序 require机制详解及实例代码
Dec 14 #Javascript
js实现获取鼠标当前的位置
Dec 14 #Javascript
详解vue.js组件化开发实践
Dec 14 #Javascript
You might like
一个简单的PHP投票程序源码
2007/03/11 PHP
php文件打包 下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件
2012/06/13 PHP
深入Apache与Nginx的优缺点比较详解
2013/06/17 PHP
免费手机号码归属地API查询接口和PHP使用实例分享
2014/04/10 PHP
php+ajax简单实现全选删除的方法
2016/12/06 PHP
php源码的安装方法和实例
2019/09/26 PHP
讨论javascript(一)工厂方式 js面象对象的定义方法
2009/12/15 Javascript
js实现文本框中焦点在最后位置
2014/03/04 Javascript
Bootstrap中的fileinput 多图片上传及编辑功能
2016/09/05 Javascript
jquery中用jsonp实现搜索框功能
2016/10/18 Javascript
微信小程序 textarea 详解及简单使用方法
2016/12/05 Javascript
微信小程序实现带刻度尺滑块功能
2017/03/29 Javascript
JavaScript中使用Async实现异步控制
2017/08/15 Javascript
Node.js 使用递归实现遍历文件夹中所有文件
2017/09/18 Javascript
Vue v2.5 调整和更新不完全问题
2017/10/24 Javascript
Vue2.0实现组件之间数据交互和通信操作示例
2019/05/16 Javascript
三分钟教你用Node做一个微信哄女友(基友)神器(面向小白)
2019/06/21 Javascript
vue实现学生信息管理系统
2020/05/30 Javascript
详解JS函数防抖
2020/06/05 Javascript
vue+iview框架实现左侧动态菜单功能的示例代码
2020/07/23 Javascript
关于vue属性使用和不使用冒号的区别说明
2020/10/22 Javascript
深入解析Python中的urllib2模块
2015/11/13 Python
python在TXT文件中按照某一字符串取出该字符串所在的行方法
2018/12/10 Python
python数据预处理方式 :数据降维
2020/02/24 Python
解决CSS3的opacity属性带来的层叠顺序问题
2016/05/09 HTML / CSS
css3弹性盒子flex实现三栏布局的实现
2020/11/12 HTML / CSS
意大利制造的西装、衬衫和针对男士量身定制的服装:Lanieri
2018/04/08 全球购物
应届生求职自荐信范文
2014/04/07 职场文书
父母寄语大全
2014/04/12 职场文书
论文指导教师评语
2014/04/28 职场文书
大学运动会加油稿200字(5篇)
2014/09/27 职场文书
催款律师函范文
2015/05/27 职场文书
写作技巧:如何撰写商业计划书
2019/08/08 职场文书
vue中data改变后让视图同步更新的方法
2021/03/29 Vue.js
利用ajax+php实现商品价格计算
2021/03/31 PHP
浅谈Redis位图(Bitmap)及Redis二进制中的问题
2021/07/15 Redis