1、bind()

事件绑定。

多个事件会链式累加,而不会覆盖。

$("div").bind("click",funtion(){alert("test1")});

$("div").bind("click",funtion(){alert("test2")});

最后的结果会出现两次弹窗, test1,test2.

对于存在默认事件的标准DOM事件,则会首先触发DOM事件,然后再触发用户绑定的事件。

2、trigger()

事件触发。

会触发 全部 绑定的事件,即上例中绑定的test1、test2都会被触发。

重要的是,标准DOM事件也会被首先触发。即上例实际上被触发了三次click事件,第一次是我们没有显式绑定的标准DOM事件click,然后才是test1、test2

e.g.此例中绑定了“lalala”事件,没有标准DOM事件,所以只显示一次“发生 Input lalala 事件!”(源码from w3school)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>test TriggerHandler</title>
<script src="jquery-1.9.1.js"></script>
</head>
<body>
<input type="text" name="FirstName" value="Hello World" />
<br />
<button>激活 input 域的 select 事件</button> <script type="text/javascript">
$(document).ready(function(){
$("input").bind("lalala",function(){
$("input").after("发生 Input lalala 事件!");
});
$("button").click(function(){
$("input").trigger("lalala");
});
});
</script>
</head>
</html>
</body>
</html>

结果:

如果将上例的事件绑定和触发的事件名换为标准DOM事件,则会先触发之,然后再触发自定义绑定的全部事件;即会触发两次,产生两次” 发生Input select事件“。

代码:

$("input").bind("select",function(){
$("input").after("发生 Input select事件!");
});
$("button").click(function(){
$("input").trigger("select");
});

结果:

3、triggerHandler()

与trigger()相比,有3点比较重要的不同:

(1).只对第一个匹配的元素进行触发操作。

(2).禁止默认事件的触发。

(3).不冒泡

下面用例子说明证明一下:

(1)只对第一个匹配的元素触发操作。

e.g. 写三个色块,绑定一个”click“事件,该事件使div色块消失。事件触发使用triggerHandler()。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>test jQueryTrigger</title>
<style type="text/css" media="screen">
    /*红绿蓝三个色块*/
#testBind{
width: 200px;
height:200px;
background-color: #f00;
}
#testTriggerHandler{
width:200px;
height:200px;
background-color: #0f0;
}
#test3{
width: 200px;
height: 200px;
background-color: #00f;
}
</style>
</head>
<body>
<div id="testBind"></div>
<div id="testTriggerHandler"></div>
<div id="test3"></div>
<script src="jquery-1.9.1.js"></script>
<script type="text/javascript">
(function(){
$("div").bind("click",function(){
$(this).hide();
});
$("div").triggerHandler("click");  //只有红色的被隐藏了,其他的没有
})();
</script>
</body>
</html>

结果:由于triggerHandler只对第一个匹配的元素进行事件触发,所以只有红色的色块被隐藏了。

如果这里换成trigger,发现页面打开时所有的色块都被隐藏了。

(2).禁止默认事件的触发。

在2中的例子中,如果使用triggerhandler(),则只会触发自定义事件,而不会触发标准DOM事件。所以结果只会产生一次”发生Input select事件“。

(3).禁止冒泡事件。

在3(1)例子中添加子元素 testBind1,html改为

<div id="testBind">
<div id="testBind1"></div>
</div>

并给新加入的元素添加css样式

#testBind1{
width: 100px;
height: 100px;
background-color: #000;
}

javascript代码部分修改为

  

  $("div").bind("hideIt",function(){
    $(this).hide();
  })

 $("#testBind1").click(function(){
$(this).triggerHandler("hideIt");
});

结果:只有黑色区域消失了,事件并没有冒泡至红色区域,红色区域没有消失。

如果使用trigger,则红色和黑色区域同时消失了,因为冒泡了。

关于jQuery的bind()\trigger()\triggerHandler()的更多相关文章

  1. 【jQuery】【转】jQuery中的trigger和triggerHandler区别

    trigger(event, [data]) 在每一个匹配的元素上触发某类事件. 这个函数也会导致浏览器同名的默认行为的执行.比如,如果用trigger()触发一个'submit',则同样会导致浏览器 ...

  2. jquery的bind跟on绑定事件的区别

    jquery的bind跟on绑定事件的区别:主要是事件冒泡: jquery文档中bind和on函数绑定事件的用法: .bind(events [,eventData], handler) .on(ev ...

  3. jQuery的.bind()、.live()和.delegate()的区别

    参考:http://kb.cnblogs.com/page/94469/ 摘要:jQuery的.bind()..live()和.delegate()之间的区别并非总是那么明显的,然而,如果我们对所有的 ...

  4. jQuery的.bind()、.live()和.delegate()之间区别

    摘要:jQuery的.bind()..live()和.delegate()之间的区别并非总是那么明显的,然而,如果我们对所有的不同之处都有清晰的理解的话,那么这将会有助于我们编写出更加简洁的代码,以及 ...

  5. jQuery中bind方法和live方法区别解析

    Javascript中的事件有它的独特性,有默认的执行事件,例如冒泡就是其中的一个.在很多比较复杂的应用程序中,停止事件的冒泡或捕获在程序开发当中是十分有用的,而在IE中有它的独特方式来阻止事件的冒泡 ...

  6. js的onclick和jquery的bind事件执行先后顺序

    近期在项目中为每一个ajax触发按钮写正在加载的效果,用的是bootstarp 代码如下 $(function(){ $('.btn').bind('click',function(e){ var $ ...

  7. JQuery中bind和unbind函数与onclick绑定事件区分

    JQuery中bind和unbind函数转载:   https://blog.csdn.net/liucheng417/article/details/51131982 页面代码: <body& ...

  8. Jquery中.bind()、.live()、.delegate()和.on()之间的区别详解

    简介 最近了解到很多网页开发者对jquery中的 .bind() .live() .delegate() 和 .on() 方法存在很多的疑惑.这些疑惑通常是关于它们之间真正的区别是什么啊,什么时候该使 ...

  9. jquery 动态绑定bind()及模拟鼠标点击A链接

    近来自觉前端有小小进步,幸而记之. 1.两个 css class 紧挨在一起 则在html元素中,要同时拥有这两个class,才能起作用 .block.db{ background-image:url ...

随机推荐

  1. Sql server中内连接语句

    数据库中学生表和课程表如下: 内连接sql语句: select a.studentName,a.studentAge,b.courseName from student a inner join co ...

  2. NSNumber,NSValue和NSData

    我们在编码中,很多时候需要将C里面原生的数据封装成对象,这样可以用NSDictionary或者NSArray来存取访问.尤其是一些做适配的情况下,这种封装是不可避免的.Objective-C提供了不少 ...

  3. case语法练习脚本之判断

    case语法练习脚本之判断 #!/bin/bash read -p "请输入一个字符,并按enter键确认:" key case "$key" in [a-z] ...

  4. awk实现 文本内的换行符 为分隔符,输出变为逗号

    awk实现 文本内的换行符 为分隔符,输出变为逗号 [liujianzuo@ow2 scripts]$ awk -F $ '{print $0}' ldap_member.log ruanshujun ...

  5. Android --ListView分页

    参考博客:Android ListView分页加载(服务端+android端)Demo 监听OnScrollListener事件 class OnListScrollListener implemen ...

  6. SQL Update实现使用一个表的数据更新另一张表

    表结构 功能 SQL Serevr Access 表结构

  7. JS函数创建的具体过程

    JS函数创建的过程: 1.新建Object对象F,类型设置为Function 2.设置F.__proto__ = Function.prototype 3.设置F.constructor = Func ...

  8. Java基础之集合框架——使用真的的链表LinkedList<>(TryPolyLine)

    控制台程序. public class Point { // Create a point from its coordinates public Point(double xVal, double ...

  9. Swift动画编程指南-01 简介

    大家好,我是老镇,这段时间家里和工作上发生了很多的事情,所以很长一段时间都没有出来搞什么小动作了.在接下来的一段时间内我会制作一些列关于使用Swift进行动画编程的视频,希望和大家胃口. 在iOS的世 ...

  10. Facebook Hacker Cup 2014 Qualification Round

    2014 Qualification Round Solutions 2013年11月25日下午 1:34 ...最简单的一题又有bug...自以为是真是很厉害! 1. Square Detector ...