jquery中的事件
事件
因为JavaScript在浏览器中以单线程模式运行,页面加载后,一旦页面上所有的JavaScript代码被执行完后,就只能依赖触发事件来执行JavaScript代码。
浏览器在接收到用户的鼠标或键盘输入后,会自动在对应的DOM节点上触发相应的事件。如果该节点已经绑定了对应的JavaScript处理函数,该函数就会自动调用。
由于不同的浏览器绑定事件的代码都不太一样,所以用jQuery来写代码,就屏蔽了不同浏览器的差异,我们总是编写相同的代码。
举个例子,假设要在用户点击了超链接时弹出提示框,我们用jQuery这样绑定一个click
事件:
/* HTML:** <a id="test-link" href="#0">点我试试</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); }); });
效果实测:
mousemove:
取消绑定
一个已被绑定的事件可以解除绑定,通过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()
将被浏览器拦截。
效果实测:
转载于:https://www.cnblogs.com/my-blogs-for-everone/p/8243630.html
jquery中的事件相关推荐
- jQuery中的事件机制深入浅出
昨天呢,我们大家一起分享了jQuery中的样式选择器,那么今天我们就来看一下jQuery中的事件机制,其实,jQuery中的事件机制与JavaScript中的事件机制区别是不大的,只是,JavaScr ...
- JQuery中的事件和选择器
学习jQuery最应该了解的也就是JQuery中的事件和选择器. 那么常见的事件有哪些: 鼠标事件:mousedown鼠标按下,mouseup鼠标松开,mouseenter鼠标进入某个元素 mouse ...
- jquery中的事件和动画
目录 一.jquery中的事件 1.加载DOM 2.事件绑定 3.合成事件 4.事件冒泡 5.事件对象的属性 6.移除事件 二.jquery中的动画 1.隐藏和显示 2.滑动效果 3.淡入淡出效果 三 ...
- java中jquery怎么学,浅谈jQuery中的事件--Java学习网
核心提示:JQuery事件初见1.JQuery中的事件绑定其实呢,JQuery中标准的事件绑定是这样写下:(如下)代码如下:$('#btn').bind('click',function(){}):但 ...
- vue学习:事件传递(冒泡和捕获),事件委托,jquery中的事件委托,$event 获取元素,vue事件修饰符
事件传递 ----冒泡和捕获 DOM事件标准定义了两种事件流,这两种事件流分别是捕获和冒泡. 和许多Web技 术一样,在它们成为标准之前,Netscape和微软各自不同地实现了它们.Netscape选 ...
- jQuery 中的事件参数传递机制
jQuery 中的事件参数传递机制 jQuery事件参数传递模型: 注:trigger 不能与 bind 的原生函数一样,使用同样的参数传递形式: 参数传递一: $(document).ready(f ...
- jQuery中绑定事件的几种方法
以click事件为例,jQuery中绑定事件有三种方法: (1)target.click(function(){}); (2)target.bind("click",functi ...
- JQuery中的事件委托
JQuery 中的事件委托 定义 事件委托就是利用冒泡的原理,把事件加到父级上,通过判断事件来源的子集,执行相应的操作,事件委托首先可以极大减少事件绑定次数,提高性能:其次可以让新元素的子元素也可以拥 ...
- 四、jQuery 中的事件和动画(嘎嘎详细)
文章目录 前言 一.事件 1.1 加载 DOM 1.1.1 执行时机 1.1.2 多次使用 1.1.3 简写方式 1.2 事件绑定 1.2.1简单使用 1.2.2 简写绑定事件 1.3 合成事件 1. ...
- jQuery 中的事件冒泡和阻止默认行为
jQuery 中的事件冒泡和阻止默认行为 参考资料: <锋利的jQuery> 作者:单东林 张晓菲 魏然 出版社: 人民邮电出版社 1.事件冒泡 [javascript] vi ...
最新文章
- [代码笔记]VUE路由根据返回状态判断添加响应拦截器
- 将redis作为windows服务安装
- LINQ字符拼接的AND和OR操作
- k8s secret使用方式:pod通过变量和volume方式使用secret
- 用了GradientDrawable后,当点击控件时,控件大小发生变化
- 浅谈计算机程序设计语言,探讨计算机程序设计语言教学
- 数组多重筛选条件排序方法
- js返回上级页面的方法(亲测)
- 【代码保留】WebService发布本地磁盘信息
- HashMap 在 JDK 1.8 中新增的数据结构 – 红黑树
- new delete 来申请动态二维数组空间
- 【经验】SQL Server 2008 R2 安装教程
- 大数据和数据挖掘有什么关系
- 微信公众号post方法Java_Java HttpClient 如何伪装微信浏览器进行POST请求
- JS数组转字符串传到JAVA后端取出
- vb修改计算机时间,如何在VB里进行日期格式转换
- GC垃圾回收—详细总结
- Java猿社区—Redis一篇系列—第二章、Redis入门和安装
- C++中数组作为形参的方法
- KMP算法之病毒检测
热门文章
- 时间基础概念及Linux中的时间函数
- java 用于xcopy复制_利用xcopy命令实现本地文件复制到远程服务器的方法
- BEVFormerV2:Adapting Modern Image Backbones to Bird’s-Eye-View Recognition via Perspective Supervisi
- Anaconda prompt cd命令 盘之间切换
- 《信息化项目文档模板十三——研发项目申报书 》
- 文献阅读(84)PFA-ScanNet
- Axure无法同时打开多个.rp文件
- [洛谷]P2108 学英语 (#模拟 -2.3)(#枚举 1.3)
- 一般配置的服务器租用一个月多少钱?服务器能买断嘛?
- css实现页面底部置底(转载)