click()、bind()、live()和delegate()方法

我之前使用click()比较多,又来因为网页内容需要前端生成用了live().有的时候使用click()和bind()分不清楚该怎么试用.查了很多资料.测试了很多次,自己明白了.

总结如下:代码注释很详细,感觉不用在分段写了.都写在一起了.

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6 </head>
 7 <body>
 8 <a href="#">点击</a>
 9 <div class="box" style="cursor:pointer;">live</div>
10 <div id="test"><a href="#">live支持链式编程吗?</a></div>
11 <script type="text/javascript" src="js/jquery-1-8-3.js"></script>
12 <script type="text/javascript">
13     $(function(){
14         $("<div class=‘box2‘ style=‘cursor:pointer;‘>live</div>").appendTo("body");
15     });
16     $("a").click(function(){
17         console.log("click");
18     });
19     /***
20      *click()方法是bind()方法的一种简单方法.
21      * 在bind()中, jQuery所有JavaScript事件对象, 比如focus, mouseover, resize, mousemove和mouseout,都可以作为type参数传递进来的.
22      */
23     var message = "left";
24     $("a").bind("click",{ msg: message }, function(e) {
25         console.log(e.data.msg);
26         return false;
27     });
28     var message = "right";
29     $("a").bind("contextmenu",{ msg: message }, function(e) { //contextmenu:鼠标右击与键盘的菜单触发键
30         console.log(e.data.msg);
31         return false;
32     });
33     /***
34      * 这样当我们左键单击<a>时,输出"left";当右键单击<a>时,输出"right".
35      */
36
37     /***
38      * live()给所有匹配的元素附加一个时间处理函数, 即使这个元素是以后添加进来的也有效.
39      */
40     $("div.box").bind("click", function() {
41         console.log("success bind");
42     });
43
44     /***
45      * 当点击class="box"为live时, 打印出success.
46      * 此时,如果有新元素添加进来,该如何操作?
47      * 这时, 当使用上边方法点击class为live的a标签时, 不会执行.
48      * 原因:这个元素是在调用bind()之后添加的, 而使用live方法使得在后边添加的元素也能够执行相应的事件.
49      */
50     $("div.box2").live("click", function() {
51         console.log("success live");
52     });
53     /***
54      * live()方法不支持链式编程
55      */
56     $("#test").children("a").live("mouseover", function() {
57         console.log("支持链式编程");//报错,不支持链式编程  Error: Syntax error, unrecognized expression: #test.children(a)
58     });
59
60     /***
61      * 上面这种写法并不会输出, 我们这个时候可以使用delegate()
62      */
63     $("#test").delegate("a", "mouseover", function() {
64         console.log("delegate");
65     });
66     /***
67      * 这样就可以输出想要的结果.
68      */
69 </script>
70 </body>
71 </html>
时间: 2024-10-19 22:12:40

click()、bind()、live()和delegate()方法的相关文章

jquery on、bind、delegate方法简单总结

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <script src="./jquery/jquery-1.11.3.min.js"></script></head> <div class="pop"

jQuery 事件 - delegate() 方法 和live()方法

当点击鼠标时,隐藏或显示 p 元素: $("div").delegate("button","click",function(){ $("p").slideToggle(); }); delegate() 方法为指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数. 使用 delegate() 方法的事件处理程序适用于当前或未来的元素(比如由脚本创建的新元素). 向未来的元素添加事件处

jQuery事件绑定on()、bind()、live()与delegate() 方法详解

jQuery事件绑定有四个方法,对应为on,off,bind,unbind,delegate,undelegate,live,die 比较和联系: 1.bind()函数只能针对已经存在的元素进行事件的设置:但是live(),on(),delegate()均支持未来新添加元素的事件设置: 2.bind()函数在jquery1.7版本以前比较受推崇,1.7版本出来之后,官方已经不推荐用bind(),替代函数为on(),这也是1.7版本新添加的函数,同样,可以 用来代替live()函数,live()函

jQuery事件绑定on()、bind()与delegate() 方法详解

本文转载:啃了一段日子的js相关了,学的过程中发现在jQuery中绑定事件时,有人用bind(),有人用on(),有人用delegate(),还有人用live(),看代码的时候觉得都实现功能了也就掀过去了,只是一直没完全弄懂之间的区别,于是今天查了下资料,自己做个总结. 之所以有这么多类型的绑定方法,是因为jQuery的版本更新的原因,如on()方法就是1.7以后出现的. jQuery的事件绑定api页面上,提到live()方法已经过时,不建议使用.所以这里我们主要就看下以下三个方法:bind(

jQuery的.click,.bind,.unbind,.on,.off,.delegate,.undelegate

.click与.bind .click和.bind都是给每个元素绑定事件,对于只绑定一个click事件,.bind事件的简写就是.click那种方式. 这两种方式都会出现两个问题: 第一个问题,如果要绑定的事件特别多,比如要绑定100个元素,要绑定100次,对于大量元素来说,影响到了性能.但是如果是id选择器,因为id唯一,用bind()方法就很快捷了. 第二个问题,对于尚未存在的元素,无法绑定.动态添加一个span元素,点击这个span元素,会发现没有动作响应. 那么你就会问,为什么要出现.b

bind() live()和delegate 区别

Event bubbling (aka event propagation)冒泡 我们的页面可以理解为一棵DOM树,当我们在叶子结点上做什么事情的时候(如click一个a元素),如果我们不人为的设置stopPropagation(Moder Browser), cancelBubble(IE),那么它的所有父元素,祖宗元素都会受之影响,它们上面绑定的事件也会产生作用.看一个示例: $('a').bind('click', function() { alert("That tickles!&quo

JQuery实现click事件绑定与触发方法分析

原生JS通过什么方法绑定click事件? 原生js有一下三种方法为DOM对象绑定click事件, 第一种,在html中添加 onclick属性,在此属性中添加要绑定的事件函数,如下, 这种方法为html处理事件的原始方法,使得html和js过分耦合, 即表现层代码 和 行为层代码耦合: <html> <head> <script src="./jquery.js"></script> </head> <body>

jQuery 事件 - delegate() 方法

<html><head><script type="text/javascript" src="/jquery/jquery.js"></script><script type="text/javascript">$(document).ready(function(){ $("div").delegate("p","click"

jQuery delegate方法实现Ajax请求事件不丢失

给元素绑定click事件后 ,遇到一个问题:当执行一些ajax请求,再次调用此页面,里面的这个click事件就失效了 比如说:我的分页是一个ajax请求 但我点下一页时 后生成的元素a就没有了click事件了 自己做项目时遇到的问题: 批量删除复选框,当点击删除的时候出发jquery页面写的方法获取所有复选框的值,直接smarty注入调取页面时没问题,当根据条件查询(Ajax实现),再次调用页面列出记录时,单击事件失效 原因:ajax加载内容是在$(document).ready()之后的操作,

UIScrollView的delegate方法妙用之让UICollectionView滑动到某个你想要的位置

一个UICollectionView有好多个cell,滑动一下,谁也不知道会停留在哪个cell,滑的快一点,就会多滑一段距离,反之则会滑的比较近,这正是UIScrollview用户体验好的地方. 如果想要UICollectionView停留到某个cell的位置,可以用 - (void)scrollToItemAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UICollectionViewScrollPosition)scrollPos