当前位置:首页 > 日记 > 正文

jQuery事件_动力节点Java学院整理

jQuery事件_动力节点Java学院整理

因为JavaScript在浏览器中以单线程模式运行,页面加载后,一旦页面上所有的JavaScript代码被执行完后,就只能依赖触发事件来执行JavaScript代码。

浏览器在接收到用户的鼠标或键盘输入后,会自动在对应的DOM节点上触发相应的事件。如果该节点已经绑定了对应的JavaScript处理函数,该函数就会自动调用。

由于不同的浏览器绑定事件的代码都不太一样,所以用jQuery来写代码,就屏蔽了不同浏览器的差异,我们总是编写相同的代码。

举个例子,假设要在用户点击了超链接时弹出提示框,我们用jQuery这样绑定一个click事件:

/* HTML: * * <a id="test-link" href="#0" rel="external nofollow" >点我试试</a> * */// 获取超链接的jQuery对象:var a = $('#test-link');a.on('click', function () { alert('Hello!');});

on方法用来绑定一个事件,我们需要传入事件名称和对应的处理函数。
另一种更简化的写法是直接调用click()方法:

a.click(function () { alert('Hello!');});

两者完全等价。我们通常用后面的写法。

jQuery能够绑定的事件主要包括:

鼠标事件

click: 鼠标单击时触发; dblclick:鼠标双击时触发; mouseenter:鼠标进入时触发; mouseleave:鼠标移出时触发; mousemove:鼠标在DOM内部移动时触发; hover:鼠标进入和退出时触发两个函数,相当于mouseenter加上mouseleave。

键盘事件

键盘事件仅作用在当前焦点的DOM上,通常是<input>和<textarea>。
keydown:键盘按下时触发; keyup:键盘松开时触发; keypress:按一次键后触发。

其他事件

focus:当DOM获得焦点时触发; blur:当DOM失去焦点时触发; change:当<input>、<select>或<textarea>的内容改变时触发; submit:当<form>提交时触发; ready:当页面被载入并且DOM树完成初始化后触发。
其中,ready仅作用于document对象。由于ready事件在DOM完成初始化后触发,且只触发一次,所以非常适合用来写其他的初始化代码。假设我们想给一个<form>表单绑定submit事件,下面的代码没有预期的效果:

<html><head> <script>  // 代码有误:  $('#testForm).on('submit', function () {   alert('submit!');  }); </script></head><body> <form id="testForm">  ... </form></body>

因为JavaScript在此执行的时候,<form>尚未载入浏览器,所以$('#testForm)返回[],并没有绑定事件到任何DOM上。
所以我们自己的初始化代码必须放到document对象的ready事件中,保证DOM已完成初始化:

<html><head> <script>  $(document).on('ready', function () {   $('#testForm).on('submit', function () {    alert('submit!');   });  }); </script></head><body> <form id="testForm">  ... </form></body>

这样写就没有问题了。因为相关代码会在DOM树初始化后再执行。
由于ready事件使用非常普遍,所以可以这样简化:

$(document).ready(function () { // on('submit', function)也可以简化: $('#testForm).submit(function () {  alert('submit!'); });});

甚至还可以再简化为:

$(function () { // init...});

上面的这种写法最为常见。如果你遇到$(function () {...})的形式,牢记这是document对象的ready事件处理函数。
完全可以反复绑定事件处理函数,它们会依次执行:

$(function () { console.log('init A...');});$(function () { console.log('init B...');});$(function () { console.log('init C...');});

事件参数

有些事件,如mousemove和keypress,我们需要获取鼠标位置和按键的值,否则监听这些事件就没什么意义了。所有事件都会传入Event对象作为参数,可以从Event对象上获取到更多的信息:

$(function () { $('#testMouseMoveDiv').mousemove(function (e) {  $('#testMouseMoveSpan').text('pageX = ' + e.pageX + ', pageY = ' + e.pageY); });});

取消绑定

一个已被绑定的事件可以解除绑定,通过off('click', function)实现:

function hello() { alert('hello!');}a.click(hello); // 绑定事件// 10秒钟后解除绑定:setTimeout(function () { a.off('click', hello);}, 10000);

需要特别注意的是,下面这种写法是无效的:

// 绑定事件:a.click(function () { alert('hello!');});// 解除绑定:a.off('click', function () { alert('hello!');});

这是因为两个匿名函数虽然长得一模一样,但是它们是两个不同的函数对象,off('click', function () {...})无法移除已绑定的第一个匿名函数。

为了实现移除效果,可以使用off('click')一次性移除已绑定的click事件的所有处理函数。

同理,无参数调用off()一次性移除已绑定的所有类型的事件处理函数。

事件触发条件

一个需要注意的问题是,事件的触发总是由用户操作引发的。例如,我们监控文本框的内容改动:

var input = $('#test-input');input.change(function () { console.log('changed...');});

当用户在文本框中输入时,就会触发change事件。但是,如果用JavaScript代码去改动文本框的值,将不会触发change事件:

var input = $('#test-input');input.val('change it!'); // 无法触发change事件

有些时候,我们希望用代码触发change事件,可以直接调用无参数的change()方法来触发该事件:

var input = $('#test-input');input.val('change it!');input.change(); // 触发change事件

input.change()相当于input.trigger('change'),它是trigger()方法的简写。

为什么我们希望手动触发一个事件呢?如果不这么做,很多时候,我们就得写两份一模一样的代码。

浏览器安全限制

在浏览器中,有些JavaScript代码只有在用户触发下才能执行,例如,window.open()函数:

// 无法弹出新窗口,将被浏览器屏蔽:$(function () { window.open('/');});

这些“敏感代码”只能由用户操作来触发:

var button1 = $('#testPopupButton1');var button2 = $('#testPopupButton2');function popupTestWindow() { window.open('/');}button1.click(function () { popupTestWindow();});button2.click(function () { // 不立刻执行popupTestWindow(),100毫秒后执行: setTimeout(popupTestWindow, 100);});

当用户点击button1时,click事件被触发,由于popupTestWindow()在click事件处理函数内执行,这是浏览器允许的,而button2的click事件并未立刻执行popupTestWindow(),延迟执行的popupTestWindow()将被浏览器拦截。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

相关文章

ps合成的怎么做无缝拼接渐变过渡?

ps合成的怎么做无缝拼接渐变过渡?

渐变,怎么做,电脑软件,ps,将两张图片无缝拼合在一起,并且拼合出有渐变过渡的效果,效果对比如图所示。软件名称:Adobe Photoshop 8.0 中文完整绿色破解版软件大小:150.1MB更新时间:2015-11-041、新建画布,把两张照片拖入画布,一张放在上面,一张放下…

ppt2007怎么另存为转成pdf格式

ppt2007怎么另存为转成pdf格式

方法,另存为,转成,格式,电脑软件,  如何将ppt2007转成pdf呢?其实方法很简单在PowerPoint2007任意打开一个PPT文档,然后单击&ldquo;Office按钮&rdquo;,选择&ldquo;另存为&rdquo;就可以了,不懂的朋友下面小编就为你提供ppt2007如何转成pdf的方…

Javacript中自定义的map.js  的方

Javacript中自定义的map.js 的方

方法,自定义,电脑软件,Javacript,js, js中没有map这个类,只能自己写一个。以下map.js和map-util.js都是自定义的map,任选其一就可以。你可以用它来像java里new Map()和put()、remove()、get()等方法。map.js:function Map() { var struct…

js canvas实现简单的图像扩散效果

js canvas实现简单的图像扩散效果

图像,效果,简单,电脑软件,js,本文实例为大家分享了canvas实现简单图像扩散的代码,供大家参考,具体内容如下<!DOCTYPE HTML> <html> <body> <canvas id="myCanvas" width="800" height="800" style="border:1px solid #c3c3c3;"> You…

浅析bootstrap原理及优缺点

浅析bootstrap原理及优缺点

优缺点,原理,电脑软件,bootstrap,网格系统的实现原理,是通过定义容器大小,平分12份(也有平分成24份或32份,但12份是最常见的),再调整内外边距,最后结合媒体查询,就制作出了强大的响应式网格系统。Bootstrap框架中的网格系统就是将容器平分成12份…

WPS如何给表格添加底纹颜色

WPS如何给表格添加底纹颜色

步骤,底纹,表格,颜色,电脑软件,  单一颜色的表格显得很不好看,只有添加上一些比较醒目的颜色,这个表格才会显得好看许多,那么小编教你怎么给表格添加底纹颜色吧。WPS给表格添加底纹颜色的步骤打开WPS表格,选择要替换颜色的表格WPS给表格添加…

PS怎么制作一个漂亮的渐变背景?

PS怎么制作一个漂亮的渐变背景?

渐变,背景,漂亮,电脑软件,PS,渐变的颜色既不失去色彩的亮度,同时也避免了复杂的颜色混合在一起的混乱感,不失为一种很不错的选择。软件名称:Adobe Photoshop 8.0 中文完整绿色破解版软件大小:150.1MB更新时间:2015-11-041、首先我们要将我们的ps…

php生成条形码的的实例详解

php生成条形码的的实例详解

条形码,详解,实例,电脑软件,php,php生成条形码的图片的实例详解因为用户的需要 写了一个条形码;用php生成一个条形码的图片 这个大家应该比我要好很多的吧,在自己项目的根目录下建立一个测试文件(直接把下面的代码放进去运行一下看看,我也是…

AngularJS中下拉框的高级用法示例

AngularJS中下拉框的高级用法示例

下拉框,示例,高级,电脑软件,AngularJS,本文实例讲述了AngularJS中下拉框的高级用法。分享给大家供大家参考,具体如下:HTML正文:<body ng-app="myApp"><!-- 对象内部属性遍历:x--key y---value --><div ng-controller="myctr01">{{sites}}<b…

JS中mouseup事件丢失的原因与解决

JS中mouseup事件丢失的原因与解决

事件,解决办法,原因,电脑软件,JS,前言当实现类似Excel选中区域的功能时,经常出现 mouseup 事件丢失的情况,由于缺少了 mouseup 事件,导致一个完整的操作无法进行。如果你是想进行拖拽移动操作,也可以参考本文。原因目前发现两个原因:触发了浏览…

ppt2013怎么设置幻灯片母版每一页

ppt2013怎么设置幻灯片母版每一页

设置,方法,幻灯片,标题,母版,  在使用office2013制作PPT时,设置母版可以减少工作量,当时不常用PPT的朋友不懂什么办?下面小编马上就告诉大家ppt2013设置幻灯片母版每一页相同标题的方法。ppt2013设置幻灯片母版每一页相同标题的方法PPT相同…

JS出现失效的情况总结

JS出现失效的情况总结

情况,失效,电脑软件,JS,对于大前端来说,JS可谓是我们的神器,从页面的效果到数据的传递,再到后台的业务,无处不充斥着JS的身影,但是万能的JS也有贪玩的时候,某一时刻你就有可能发现你形影不离的JS突然间罢工了,这对我们前端来说绝对是头痛的事,作为…