jQuery事件用法实例汇总


Posted in Javascript onAugust 29, 2014

本文以实例形式详细汇总了jQuery中事件的用法,对jQuery的学习有很好的参考价值。分享给大家供大家参考之用。具体用法如下:

1.通过方法名给元素绑定事件:

$('li').click(function(event){})

2.通过bind方法给元素绑定事件:

$('li')
 .bind('click',function(event){})
 .bind('click',function(event){})

可见,通过bind,可以给元素绑定多个事件。

3.事件的命名空间

为什么需要事件命名空间?

→假设,先给li元素绑定2个click事件。

$('li')
 .bind('click',function(event){})
 .bind('click',function(event){})

→现在我们要把其中一个click事件注销掉,可能这样写:

$('li').unbind('click')

但这样,我们li所有的click事件都注销了,这不是我们想要的。使用事件命名空间可解决这一问题,之所以需要事件命名空间,是因为它为我们在注销事件的时候提供了方便。

如何使用事件命名空间?
→在为元素绑定事件的时候,在事件名称后加上命名空间,符合格式:事件名称.命名空间名称。

$('li')
 .bind('click.editMode',function(event){})
 .bind('click.displayMode',function(event){})

→在注销事件的时候,可以这样写:

$('li').unbind('click.editMode')

4.事件的种类

blur
change
click
dblclick
error
focus
focusin
focusout
keydown
keypress
keyup
load
mousedown
mouseenter
mouseleave
mousemove
mouseout
moseover
mouseup
ready
resize
scroll
select
submit
unload

5.one方法

用于创建一次性事件,一旦这个事件执行了一次后,就会被自动删除。

$("p").one("click",function(){
 $(this).animate({fontSize: "+=6px"});
})

6.删除事件

//先给元素添加事件
$("p").click(function(){
 $(this).slideToggle();
})
//再把元素的事件删除
$("button").click(function(){
 $("p").unbind();
})

7.Event属性

实际上,它是jquery的全局属性,jQuery.Event。每当触发事件,Event对象实例就会被传递给Event Handler。

可以通过Event的构造函数来创建事件,并触发事件。

var e = jQueery.Event("click")
jQuery("body").trigger(e);

甚至可以通过构造函数,把一个匿名对象放在Event中传递。

var e = jQuery.Event("keydown", {keyCode : 64});
jQuery("body").trigger(e);

使用的时候,通过event.data.KeyCode来获取匿名对象的值。

可以通过jQuery.Event的构造函数把匿名对象放在Event中传递,不仅如此,通过事件也可以传递匿名对象。

$("p").click({param1 : "Hello", param2 : "World"}, someFunction);
function someFunction(event){
 alert(event.data.param1);
 alert(event.data.param2);
}

可见,通过event.data可以获取匿名对象的键。

通过Event对象实例,还可以拿到其它方面的信息,比如:

$("p").click(function(event){
 alert(event.target.nodeName);
})

以上,通过event.target.nodeName获取触发事件的元素名称。

jQuery.Event的其它属性包括:

altKey 如果alt键按下就为true,在Mac键盘中alt键标记为Option
ctrKey ctrl键被按下
shiftKey Shift键被按下
currentTarget 冒泡阶段的当前元素
data
metaKey 一般Meta键是Ctrl,而Mac上是Command键
pageX 鼠标事件时光标相对于页面原点的水平坐标
pageY 鼠标事件时光标相对于页面原点的垂直坐标
relatedTarget 触发鼠标事件时光标离开或进入的元素
screenX 鼠标事件时光标相对于屏幕原点的水平坐标
screenY 鼠标事件时光标相对于屏幕原点的垂直坐标
result 从前面的事件处理器返回最近非undefined的值
target 触发事件的元素
timestamp jQuery.Event创建实例时的时间戳,以毫秒为单位
type 事件类型,比如click
which 如果是键盘事件,代表按键的数字,如果是鼠标事件,记录按下的是左键、中键或右键

8.Event方法

event.preventDefault()阻止默认行为
event.stopPropgation()停止"冒泡",即停止沿着DOM向上进一步传播
event.stopImmediatePropagation()停止所有事件的进一步传播
event.isDefaultPrevented()
event.isPropgationStopped()
isImmediatePropgagationStopped()

9.live方法和on方法

该方法允许我们为还不存在的元素创建事件。与bind方法不同的是:能为所有匹配的元素绑定事件,设置是那些暂时还不存在、需要动态创建的元素。而且,live方法不一定要放在$(function(){})就绪处理器中。到了 jQuery 1.7以后,就改为on方法了。

$("p").on("click", function(){
 alert("hello");
})

如果想取消注册事件:

$("button").click(function(){
 $("p").off("click");
})

10.trigger方法

当我们想手动触发元素绑定的事件时可以使用trigger方法。

$("#foo").on("click",function(){
 alert($(this).text());
})
$("#foo").trigger("click");

还可以在绑定事件的时候出传入形参,在trigger事件的时候传入实参。

$("#foo").on("custom", function(event, param1, param2){
 alert(param1 + "\n" + param2)
})
$("#foo").trigger("custom",["Custom","Event"]);

trigger触发由jQuery.Event创建的实例:

var event = jQuery.Event("logged");
event.user = "foo";
event.pass = "bar";
$("body").trigger(event);

甚至可以在trigger触发方法的时候传入匿名对象:

$("body").trigger({
 type: "logged",
 user: "foo",
 pass: "bar"
});

如果想停止触发事件的传播,可通过jQuery.Event实例的stopPropgation()方法,或在任何事件中返回false。

11.triggerHandler方法

triggerHandler方法与trigger方法的不同之处在于:triggerHandler方法不会执行元素的默认事件,也不会"冒泡"。

//给一个元素绑定一个focus事件
$("input").focus(function(){
 $("<span>Focused</span>").appendTo("#id").fadeOut(1000);
})
//用triggerHandler触发
$("#id").click(function(){
 $("input").triggerHandler("focus");//不会触发focus的默认行为,即进入文本框
})
//用trigger触发
$("#id").click(function(){
 $("input").trigger("focus");//同时触发foucs的默认行为和绑定行为
})

12.事件冒泡和事件委托

什么是事件冒泡?

有这么一段代码。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
 <div>
  <p><a href="#foo"><span>I am a Link!</span></a></p>
  <p><a href="#bar"><b><i>I am another Link!</i></b></a></p>
 </div>
</body>
</html>

现在,给该页面所有的元素绑定click事件,包括window和document。

$(function () {
   $('*').add([document, window]).on('click', function(event) {
    event.preventDefault();
    console.log(this);
   });
  });

当单击页面任何元素,单击事件会从当前元素开始,向上一级元素传播,直到最顶级元素,这里是window。

如何阻止事件冒泡?

显然,通常只希望在某个特定元素发生特定的事件,不希望事件冒泡的发生。这时候我们可以针对某个特定元素绑定事件。

$(function () {
   $('a').on('click', function(event) {
    event.preventDefault();
    console.log($(this).attr('href'));
   });
  });

以上,只为a绑定了click事件,无它。

如何有效利用事件冒泡?

在jquery中,事件委托却很好地利用了事件冒泡。

<html>
<body>
<div id="container">
 <ul id="list">
  <li><a href="http://domain1.com">Item #1</a></li>
  <li><a href="/local/path/1">Item #2</a></li>
  <li><a href="/local/path/2">Item #3</a></li>
  <li><a href="http://domain4.com">Item #4</a></li>
 </ul>
</div>
</body>
</html>

现在,我们想给现有li中的a标签绑定事件,这样写:

$( "#list a" ).on( "click", function( event ) {
 event.preventDefault();
 console.log( $( this ).text() );
});

但是,如果又在现有的ul中添加新的li和a,那情况又如何呢?

$( "#list" ).append( "<li><a href='http://newdomain.com'>Item #5</a></li>" );

结果,点击新添加的li中的a,什么都没有发生。那么,如何为动态添加的元素绑定事件呢?

如果我们能把事件绑定到a的父级元素,那在父级元素内生成的子级动态元素,也会有绑定事件的行为。

$( "#list" ).on( "click", "a", function( event ) {
 event.preventDefault();
 console.log( $( this ).text() );
});

以上,我们把click事件绑定到a的父级元素id为list的ul上,on方法中的第二个参数,这里是a,是事件真正的执行者。具体过程如下:
→点击某个a标签
→根据事件冒泡,触发了a的父级元素ul的click事件
→而事件真正的执行者是a

事件委托允许我们把事件绑定到父级元素,这相当于给所有的子级元素绑定了事件,不管这个子级元素是静态的、还是动态添加的。

13.toggle方法

允许我们依次执行多个事件,当执行完最后一个事件后,再执行第一个事件。

$('img[src*=small]').toggle({
 function(){},
 function(){},
 function(){}
});

14.mouseenter和mouseleave方法

$(element).mouseenter(function(){}).mouseleave(function(){})

15.hover方法

$("p").hover(function(){
 $("p").css("background-color","yellow");
 },function(){
 $("p").css("background-color","pink");
});

相信本文所述对大家的jQuery程序设计有一定的借鉴价值。

Javascript 相关文章推荐
javascript 支持链式调用的异步调用框架Async.Operation
Aug 04 Javascript
jQuery 拖动层(在可视区域范围内)
May 24 Javascript
简单的ajax连接库分享(不用jquery的ajax)
Jan 19 Javascript
使用jquery局部刷新(jquery.load)从数据库取出数据
Jan 22 Javascript
javascript实现瀑布流自适应遇到的问题及解决方案
Jan 28 Javascript
在JavaScript的正则表达式中使用exec()方法
Jun 16 Javascript
详解VueJs前后端分离跨域问题
May 24 Javascript
vue-quill-editor实现图片上传功能
Aug 08 Javascript
node文字生成图片的示例代码
Oct 26 Javascript
10个最受欢迎的 JavaScript框架(推荐)
Apr 24 Javascript
js对象简介与基本用法示例
Mar 13 Javascript
vue基于Echarts的拖拽数据可视化功能实现
Dec 04 Vue.js
laytpl 精致巧妙的JavaScript模板引擎
Aug 29 #Javascript
jQuery动画特效实例教程
Aug 29 #Javascript
jQuery实用函数用法总结
Aug 29 #Javascript
jQuery实现异步获取json数据的2种方式
Aug 29 #Javascript
原生javascript实现的分页插件pagenav
Aug 28 #Javascript
JavaScript判断变量是对象还是数组的方法
Aug 28 #Javascript
分享一个自己动手写的jQuery分页插件
Aug 28 #Javascript
You might like
PHP 身份验证方面的函数
2009/10/11 PHP
CodeIgniter模板引擎使用实例
2014/07/15 PHP
thinkphp项目部署到Linux服务器上报错“模板不存在”如何解决
2016/04/27 PHP
ExtJs Excel导出并下载IIS服务器端遇到的问题
2011/09/16 Javascript
jQuery操作Select的Option上下移动及移除添加等等
2013/11/18 Javascript
浮动的div自适应居中显示的js代码
2013/12/23 Javascript
一个支持任意尺寸的图片上下左右滑动效果
2014/08/24 Javascript
jquery实现鼠标滑过显示提示框的方法
2015/02/05 Javascript
Grunt入门教程(自动任务运行器)
2015/08/06 Javascript
jQuery实现点击小图片淡入淡出显示大图片特效
2015/09/09 Javascript
DIV+CSS+jQ实现省市联动可扩展
2016/06/22 Javascript
简单实现js悬浮导航效果
2017/02/05 Javascript
Javascript中的神器——Promise
2017/02/08 Javascript
Angular中ng-options下拉数据默认值的设定方法
2017/06/21 Javascript
JavaScript在控件上添加倒计时功能的实现代码
2017/07/04 Javascript
vue2.0 子组件改变props值,并向父组件传值的方法
2018/03/01 Javascript
浅谈针对Vue相同路由不同参数的刷新问题
2018/09/29 Javascript
Cocos2d实现刮刮卡效果
2018/12/20 Javascript
vue实现新闻展示页的步骤详解
2019/04/11 Javascript
微信小程序以ssm做后台开发的实现示例
2020/04/08 Javascript
基于jquery实现彩色投票进度条代码解析
2020/08/26 jQuery
在Python中使用mongoengine操作MongoDB教程
2015/04/24 Python
介绍Python中的fabs()方法的使用
2015/05/14 Python
windows系统下Python环境搭建教程
2017/03/28 Python
python正则实现提取电话功能
2018/02/24 Python
Flask之flask-session的具体使用
2018/07/26 Python
PyCharm License Activation激活码失效问题的解决方法(图文详解)
2020/03/12 Python
python中id函数运行方式
2020/07/03 Python
Melijoe美国官网:法国奢侈童装购物网站
2017/04/19 全球购物
aden + anais英国官网:美国婴儿贴身用品品牌
2019/09/08 全球购物
元宵晚会主持词
2014/03/25 职场文书
2014年党的群众路线学习心得体会
2014/11/05 职场文书
法制教育观后感
2015/06/17 职场文书
SQL Server中的游标介绍
2022/05/20 SQL Server
mysql数据库隔离级别详解
2022/06/16 MySQL
数据设计之权限的实现
2022/08/05 MySQL