jquery提供了许多的事件处理函数,下面对其总结一下,梳理一下知识点,便于记忆和使用。

一、鼠标事件

1. click():鼠标单击事件

$div = $("div")
$div.click(data,function (event) { //点击盒子变蓝
$(this).css({
"background": "blue",
});
console.log(event);
})

$div = $("div") $div.click(data,function (event) { //点击盒子变蓝 $(this).css({ "background": "blue", }); console.log(event); })

  • 参数function:匿名函数有且只有一个默认的参数event,event输出事件相关的信息;不允许有其他的参数,可以不写
  • 参数data:有时候需要传递额外的数据给函数,data可以是一个数组,不需要可以省略

扩展:

//event参数可以获取事件的各种属性,有几个常用

event.target:  获取触发事件的元素

$div.click(function (event) {
$(event.target).css({
"background": "blue",
});
}) event.data: 获取事件传入的参数数据。
event.pageX: 获取鼠标光标点击距离文档左边left的距离;
event.pageY: 获取鼠标光标点击距离文档上边top的距离; event.offsetX: 获取鼠标光标点击距离元素左边left的距离;
event.offssetY: 获取鼠标光标点击距离元素上边top的距离; event.screenX: 获取鼠标光标点击距离屏幕left的距离;
event.screenY: 获取鼠标光标点击距离屏幕top的距离;
 

扩展2:外层加个function函数表示,只有dom结构树全部加载完之后,再执行jquery代码,这样代码可以放在开头或任意位置了

以下是缩写,非省略写法是:

$(document.ready(function(){}))   --->   $(function(){})

<body>
<script>
$(function () {
$div.click(data,function (event) { //点击盒子变蓝
$(this).css({
"background": "blue",
});
console.log(event);
})
})
</script>
<div>1111</div>
</body>

2. dblclick():鼠标双击事件

$div = $("div")
$div.dblclick()(function (event) { //双击盒子变蓝
$(this).css({
"background": "blue",
});
})
  • 参数和click的用法完全一样,event同样可以获取众多的属性。

3. 鼠标进入和离开(进入子元素也触发)

  • mouseover():进入
  • mouseout():离开
$div = $("div")
$div.mouseover(function (event) {
$(this).css({
"background": "blue",
});
})
$div.mouseout(function (event) {
$(this).css({
"background": "blue",
});
})
  • 参数同上,绑定后鼠标进入元素的子元素会再次触发。

4. 鼠标进入和离开(进入子元素不触发)

  • mouseenter() 鼠标进入
  • mouseleave() 鼠标离开
$div = $("div")
$div.mouseenter(function (event) {
$(this).css({
"background": "blue",
});
})
$div.mouseleave(function (event) {
$(this).css({
"background": "blue",
});
})
  • 参数同上,绑定后鼠标进入和离开子元素不会再次触发。

5. hover():同时为mouseenter和mouseleave事件指定处理函数

$div = $("div")
// 鼠标进入和移出事件
$div.hover(function (event) {
$div.css({
"background": "blue",
}) },function (event) {
$div.css({
"background": "red",
});
})
  • hover可以同时加入两个function,第一个是鼠标进入触发,第二个是移出触发。
  • 前面不可以添加data参数,否则报错。

6. 鼠标按下和松开

  • mouseup() 松开鼠标
  • mousedown() 按下鼠标
$div = $("div")
$div.mousedown(function (event) {
$(this).css({
"background": "blue",
});
console.log(event);
}) $div.mouseup(function (event) {
$(this).css({
"background": "blue",
});
console.log(event);
})
  • 参数同click,和点击事件click不同的是,click在鼠标点击(包括按下和松开)后才触发事件,这里是按下或松开就会触发。

7. mousemove() 鼠标在元素内部移动

  • 同法和参数同上。

二、键盘事件

*keypress():按下键盘(指的是按下)

 $(window).keypress([20],function (event) {
$div.css({
"background": "blue",
});
console.log(event.which);
})
  • 参数:同鼠标事件,第一个参数传递数据,function默认参数event值按下键盘事件。
  • 键盘事件需要绑定可获得焦点的元素,如:input,body,html,一般绑定窗口:window。
  • 如果需要具体判断按下了那个按键,使用event.which,返回键盘字母的ascii码。

注意:如果按下不放开,事件会连续触发。

*按下和松开

  • keydown() 按下键盘
  • keyup() 松开键盘
$(window).keydown([20],function (event) {
$div.css({
"background": "blue",
});
console.log(event);
}) $(window).keyup([20],function (event) {
$div.css({
"background": "blue",
});
console.log(event);
})
  • 参数同上。
  • keydown和keypress方法区别在于,keypress事件不会触发所有的按键,比如 ALT、CTRL、SHIFT、ESC等。

三、焦点事件

* 元素获取和失去焦点

  • blur() 元素失去焦点
  • focus() 元素获得焦点
$put = $("input");
$put.focus():元素自动获取焦点 $put.focus(function (event) {
console.log(event);
$div.css({
"background": "blue",
})
})//获取焦点后触发事件 $put.blur(function (event) {
console.log(event);
$div.css({
"background": "blue",
})
})//失去焦点后触发事件
  • 参数同click;
  • 焦点事件一般使用在input标签上,其他的标签一般得不到焦点。

四、表单事件

* submit(): 用户递交表单

$(".form").submit(function (event) {
alert("提交事件");
console.log(event);
//阻止系统默认事件
event.defaultPrevented();
return false;
})
  • submit事件绑定在form表单上,点击提交按钮时触发该事件,可以对系统默认的提交进行拦截。
  • event.defaultPrevented();//阻止系统提交数据

五、其他事件

* ready():DOM加载完成后执行

  • 这个事件用来防止js报错,每次引入js都要使用,不在赘述。

* resize():浏览器窗口的大小发生改变触发事件

$(window).resize(function () {
console.log($(window).width());
})
  • 参数同click,这个事件需要绑定在window上才会生效,用于监控窗口的变化。

* scroll():滚动条的位置发生变化

* change(): 表单元素的值发生变化

$put.change(function () {
$div.css({
"background": "blue",
}); })
  • 当表单元素如单选框、多选框、文本框等值发生变化时触发。

* unload() :用户离开页面

$(document).unload(function () {
$div.css({
"background": "blue",
});
console.log("likai");
})

六、通用的绑定事件和解绑方法

* bind():绑定

$(function(){
$('div').bind('mouseover click', function(event) {
alert($(this).html());
});
});
  • 参数:第一个参数为需要绑定的事件的名字,可以绑定多个事件,之间用空格隔开;第二个参数是处理函数。

* unbind():解绑

$(function(){
$('#div1').bind('mouseover click', function(event) {
// $(this).unbind();解绑所有事件
$(this).unbind('mouseover');解绑指定事件
});
});
  • 参数同bind。

* on():绑定和委托都可用的方法

$("div").on(event,childSelector,data,function);
//四个参数 $(function(){
$('div').on('mouseover click', function(event) {
$(this).css({
"background": "blue",
});
});
});
  • 参数
  • event,需要绑定的事件,多个事件用空格隔开;
  • function:事件的处理方法。
  • childSelector:选择需要委托的元素,用于委托事件。
  • data:额外的传参。

* off():解绑

$(function(){
$('#div1').on('mouseover click', function(event) {
// $(this).off();解绑所有事件
$(this).off('mouseover');解绑指定事件
});
});

* one():绑定一次自动解绑

如果需要触发事件一次后就自动失效,比如:按钮点击一次后 就失效使用这个方法。

$(function(){
$('div').one('mouseover click', function(event) {
$(this).css({
"background": "blue",
});
});
});
  • 注意:当一次性绑定多个事件时,多个事件相互是独立的,即如果有一个事件被触发,那么这个事件解绑,对另外没有被触发的事件没有影响。

七、自定义和主动触发事件

说明:对于系统没有提供的事件,可以自己定义并主动触发。

$div.bind("abc",function () {
$(this).css({
"background": "blue",
}); })
$div.trigger("abc");
  • trigger():触发事件的方法;这种方式类似协程。

八、事件的两大特征运用:

1. 事件的冒泡:

  • 定义:一个元素标签如div,在上面触发某种事件,如单击;如果div上没有定义单击事件或者定义了单击事件,但返回值不是false,即没有阻止冒泡;那么事件会向父级传递,每一个定义了单击事件的父级都会被触发事件,直到到达document或window。

注意:冒泡是事件的固有属性(自定义不适用),适合所有的系统事件。

  • 作用: 允许多个事件被击中到父级处理,减少绑定次数,提高性能。
$(function(){
var $box1 = $('.father');
var $box2 = $('.son');
var $box3 = $('.grandson');
$box1.click(function() {
alert('father');
});
$box2.click(function() {
alert('son');
});
$box3.click(function(event) {
alert('grandson');
// event.stopPropagation();阻止冒泡 });
$(document).click(function(event) {
alert('grandfather');
});
}) ...... <div class="father">
<div class="son">
<div class="grandson"></div>
</div>
</div>
  • 说明:上面代码界面,单击“grandson”的div,所有事件都会被触发;
  • 如果要阻止事件冒泡,使用stopPropagation()

扩展:合并阻止操作

event.stopPropagation();//阻止冒泡
event.preventDefault();//阻止默认行为 // 合并写法:
return false;
  • 实际开发中,一般把阻止冒泡和阻止默认行为合并起来写。

2. 事件委托

定义:

利用冒泡原理,将要处理相同事件的子元素的事件委托给父级,从而极大减少事件绑定的次数,提高性能。

  • 委托事件

  1. delegate():
$(function(){
$list = $('list');
$list.delegate('li', 'click', function(event) {
$(this).css({background:'red'});
});
})//给列表下面的每个li元素的事件委托给list列表。
  • 参数:第一个参数是需要委托的元素,采用css选择器的写法,默认从一级子元素开始;第二个参数时要委托的事件,可以是多个,之间用空格隔开,第三个参数是处理函数。

  • event指触发事件的那个对象。

  1. on():
$(function(){
$list = $('list');
$list.on('click', 'li', function(event) {
$(this).css({background:'red'});
});
})//给列表下面的每个li元素的事件委托给list列表。

参数:

  • 第一个是需要委托的事件,多个用空格隔开;
  • 第二个是需要委托事件的子元素;
  • 第三个是触发处理函数。
  1. one():委托触发一次自动取消委托
$(function(){
$('div').one('click',"li" function(event) {
$(this).css({
"background": "blue",
});
});
});

说明:参数用法和on事件一样。

取消委托

  1. undelegate():
$list.undelegate();//选择器找到委托对象取消委托
  • 使用undelegate()方法取消委托,所有的子元素的委托都将被取消。
  1. off():

$list.off("click","li");

总结:

  • 每一个事件相当于一个协程,异步操作;
  • 所有的事件并列处理,事件不要嵌套事件,否则会出现重复绑定。
  • 可以进行事件委托尽量使用委托,减少系统资源消耗。

补充实例:

动态给ul添加li标签的时候,li标签原来已经绑定了click事件,但新添加的标签click不起作用,那么需要委托绑定delegate()

click和bind是提前绑定,delegate()是当单击标签的时候才绑定的

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<input class="btn" type="button" value="添加">
<ul>
<li>11</li>
<li>22</li>
<li>33</li>
</ul> <script src="jquery.js"></script>
<script>
$(function () {
$(".btn").click(function () {
$("ul").append("<li>88</li>")
});
$("li").click(function () {
alert('123')
})
});
</script>
</body>
</html>

原来的代码可以弹出,新增的li标签不能弹出123

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<input class="btn" type="button" value="添加">
<ul>
<li>11</li>
<li>22</li>
<li>33</li>
</ul> <script src="jquery.js"></script>
<script>
$(function () {
$(".btn").click(function () {
$("ul").append("<li>88</li>")
});
$("ul").delegate('li','click',function () { //将所有的li标签委托绑定给ul
alert('123')
})
});
</script>
</body>
</html>

将li标签委托绑定给li

【html、CSS、javascript-11】jquery-事件使用方法总结的更多相关文章

  1. JavaScript和jQuery中的方法整理

    一.属性操作 // JavaScript: Dom.hasAttribute('attrName'); //是否有指定属性 Dom.hasAttributes(); //是否有属性 Dom.getAt ...

  2. jQuery 事件 - bind() 方法

    定义和用法 bind() 方法为被选元素添加一个或多个事件处理程序,并规定事件发生时运行的函数. 实例1(一个事件) 记得把js引用地址换掉 当点击鼠标时,隐藏或显示 p 元素: <html&g ...

  3. 【Python全栈-JavaScript】jQuery事件

    jQuery事件 一.页面载入 当DOM载入就绪可以查询及操纵时绑定一个要执行的函数. 这是事件模块中最重要的一个函数,因为它可以极大地提高web应用程序的响应速度. 简单地说,这个方法纯粹是对向 w ...

  4. Javascript和jquery事件-鼠标移入移出事件

    javascript使用mouseover和mouseout,只在css中支持hover jquery支持mouseover和mouseout,封装了mouseenter.mouseleave事件函数 ...

  5. jquery事件使用方法总结

    jquery提供了许多的事件处理函数,学习前端一段时间了,下面对其总结一下,梳理一下知识点. 一.鼠标事件 1. click():鼠标单击事件 $div = $("div") $d ...

  6. jQuery事件委托方法 bind live delegate on

    1.bind    jquery 1.3之前 定义和用法:主要用于给选择到的元素上绑定特定事件类型的监听函数 语法:  bind(type,[data],function(e)); 特点: a.适合页 ...

  7. jquery事件使用方法总结 (转)

    http://www.cnblogs.com/cwp-bg/p/7668940.html jquery提供了许多的事件处理函数,学习前端一段时间了,下面对其总结一下,梳理一下知识点. 一.鼠标事件 1 ...

  8. jQuery事件绑定方法bind、 live、delegate和on的区别

    我们试图绑定一些事件到DOM元素上的时候,我相信上面这4个方法是最常用的.而它们之间到底有什么不同呢?在什么场合下用什么方法是最有效的呢? 1.准备知识 当我们在开始的时候,有些知识是必须具备的: 1 ...

  9. jQuery 事件 - trigger() 方法

    <html> <head> <script type="text/javascript" src="/jquery/jquery.js&qu ...

  10. jQuery 事件 - delegate() 方法

    <html><head><script type="text/javascript" src="/jquery/jquery.js" ...

随机推荐

  1. java 测试时 程序的 运行时间

    检测一个JAVA程序的运行时间方法:long startTime = System.currentTimeMillis();//获取当前时间//doSomeThing();   //要运行的java程 ...

  2. iOS逆向系列-逆向APP思路

    界面分析 通过Cycript.Reveal. 对于Reveal安装配置可参考配置iOS逆向系列-Reveal 通过Reveal找到内存中的UI对象 静态分析 开发者编写的所有代码最终编译链接到Mach ...

  3. memcache 使用手册

    Memcached 教程 Memcached是一个自由开源的,高性能,分布式内存对象缓存系统. Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fit ...

  4. CodeForces 258D Little Elephant and Broken Sorting(期望)

    CF258D Little Elephant and Broken Sorting 题意 题意翻译 有一个\(1\sim n\)的排列,会进行\(m\)次操作,操作为交换\(a,b\).每次操作都有\ ...

  5. 【BZOJ3944】Sum

    题面 Description Input 一共T+1行 第1行为数据组数T(T<=10) 第2~T+1行每行一个非负整数N,代表一组询问 Output 一共T行,每行两个用空格分隔的数ans1, ...

  6. NFS+mou

    前言 有两台电脑,Linux操作系统,服务器和客户端,IP不同,但是可以相互访问. 客户端想访问服务器的文件系统 准备工作 假设 服务器的ip为 192.168.0.100,要分享为公共文件夹的目录为 ...

  7. 70 二叉树的层次遍历 II

    原题网址:http://www.lintcode.com/zh-cn/problem/binary-tree-level-order-traversal-ii/ 给出一棵二叉树,返回其节点值从底向上的 ...

  8. Win7下SQLServer访问虚拟机上的MySQL

    一.确保Win7能telnet通MySQL端口,防火墙设置可参考http://www.cnblogs.com/ShanFish/p/6519950.html二.配置系统DSN1.在Win7上安装MyS ...

  9. myeclipse工程更新后java图标变为空心的解决办法

    今天用svn更新了工程发现目录结构改变了,同时所有的java文件的图标变成了空心的.解决办法如下 1.右键单击工程目录名,选择properties. 2.选择java bulid path,正常的应该 ...

  10. PKU 百练OJ Arbitrage

    http://bailian.openjudge.cn/practice/2240/ #include <iostream> #include <string> #includ ...