【JQ】jq动态绑定事件.on()、解绑事件off()

#JQ 绑定与解绑事件的方法的历史演变

  1、 jquery1.4 及之前的版本,由.click() 或 .bind()方法绑定的事件,不能适用脚本创建的新元素即是说页面加载完成后,再动态创建的DOM元素并不能响应之前绑定的事件!解绑事件使用.unbind()方法;

  旧版本的处理方法是使用.live()方法来代替事件绑定.bind(),使得绑定的事件能适用脚本创建的新元素,从而实现事件的动态绑定;解绑事件使用.unlive()方法;

 1 <html>
 2 <head>
 3 <script type="text/javascript" src="/jquery/jquery.js"></script>
 4 <script type="text/javascript">
 5 $(document).ready(function(){
 6   $("p").live("click",function(){
 7     $(this).slideToggle();
 8   });
 9   $("button").click(function(){
10     $("<p>This is a new paragraph.</p>").insertAfter("button");
11   });
12 });
13 </script>
14 </head>
15 <body>
16 <p>这是一个段落。</p>
17 <p>点击任意 p 元素会令其消失。包括本段落。</p>
18 <button>在本按钮后面插入新的 p 元素</button>
19 <p><b>注释:</b>通过使用 live() 方法而不是 bind() 方法,新的 p 元素同样会在点击时消失。</p>
20 </body>
21 </html>

  在线测试.live()方法地址:http://www.w3school.com.cn/tiy/t.asp?f=jquery_event_live_newelement

  2、但自jq1.7版本开始,官方已明文表示不再推荐使用使用.live()方法,官方解释为:live()调用过程首先将事件方法绑定到了Document,然后,查找Document里是否有匹配元素。 这个过程对于性能来说可能比较浪费。官方推荐将.live()改成Delegate()方法,适用脚本动态创建的新元素。解绑使用.undelegate()方法;

 1 <html>
 2 <head>
 3 <script type="text/javascript" src="/jquery/jquery.js"></script>
 4 <script type="text/javascript">
 5 $(document).ready(function(){
 6   $("div").delegate("p","click",function(){
 7     $(this).slideToggle();
 8   });
 9   $("button").click(function(){
10     $("<p>这是一个新段落。</p>").insertAfter("button");
11   });
12 });
13 </script>
14 </head>
15 <body>
16 <div style="background-color:yellow">
17 <p>这是一个段落。</p>
18 <p>请点击任意一个 p 元素,它会消失。包括本段落。</p>
19 <button>在本按钮后面插入一个新的 p 元素</button>
20 </div>
21 <p><b>注释:</b>通过使用 delegate() 方法,而不是 live(),只有 div 元素中的 p 元素会受到影响。</p>
22 </body>
23 </html>

  在线测试.delegate()方法地址:http://www.w3school.com.cn/tiy/t.asp?f=jquery_event_delegate_newelement

  3、jq1.8开始,官方又再次申明:如果你开发最新版本的jQuery,完全可以使用on()方法来处理所有的事件绑定,避免过多的方法调用,因为其实在最新版本的jQuery类库中,所有以上旧版方法在后面其实都是调用on()方法。解绑事件使用.off()方法;

#.on()与.off()的具体使用方法

  1、.on()的使用

<!DOCTYPE html>
<html>
<head>
<script src="https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js">
</script>
<script>
$(document).ready(function(){
  $("#div1").on("click","p",function(){
    $(this).css("background-color","pink");
  });
});
</script>
</head>
<body>

<h4 style="color:green;">This example demonstrates how to achieve the same effect using on() and delegate().</h4>

<div id="div1">
<p>Click to set background color using the <b>on() method</b>.</p>
</div>

</body>
</html>

   添加多个事件处理程序方法:

1 $(document).ready(function(){
2   $("p").on("mouseover mouseout",function(){
3     $("p").toggleClass("intro");
4   });
5 });

  2、.off()的使用

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <meta charset="utf-8">
 5 <title>菜鸟教程(runoob.com)</title>
 6 <script src="https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js">
 7 </script>
 8 <script>
 9 $(document).ready(function(){
10   $("body").on("click","p",function(){
11     $(this).css("background-color","pink");
12   });
13   $("#btn1").click(function(){
14     $("body").off("click","p");
15   });
16
17 });
18 </script>
19 </head>
20 <body>
21
22 <h4 style="color:green;">该事件演示了如何使用 off() 和 undelegate() 方法来达到相同的效果。</h4>
23
24 <p>点击段落修改背景颜色。</p>
25 <p>点击以下按钮再点击这个段落 ( click 事件被移除)。</p>
26
27 <button id="btn1">使用  off() 方法移除 click 事件</button>
28
29 </body>
30 </html>

原文地址:https://www.cnblogs.com/willingtolove/p/9594948.html

时间: 2024-11-05 11:47:58

【JQ】jq动态绑定事件.on()、解绑事件off()的相关文章

从零开始学 Web 之 jQuery(六)为元素绑定多个相同事件,解绑事件

大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:http://www.cnblogs.com/lvonve/ CSDN:https://blog.csdn.net/lvonve/ 在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识点,期间也会分享一些好玩的项目.现在就让我们一起进入 Web 前端学习的冒险之旅吧! 一.为元素绑定多个

JavaScript绑定事件跟解绑事件的兼容代码

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <input type="button" value="按钮" id="bt"/> <input type=

webapi中注册事件以及解绑事件

注册事件的方式有两种: 1.on + 事件名 特点:同一个元素注册同一个事件多次,后面的会把前面的覆盖 2.addEventListener(event,listener,useCapture); 参数:event:事件名 ;  listener:事件处理函数 : useCapture: 决定事件冒泡(false,默认值)还是事件捕获(true); 特点: 不存在覆盖问题,但是不支持IE6,7,8 解绑注册事件 1.on+事件名: on+事件名 = null; 2.addEventListene

js中的解绑事件

//解绑事件: /* * 注意:用什么方式绑定事件,就应该用对应的方式解绑事件 * 1.解绑事件 * 对象.on事件名字=事件处理函数--->绑定事件 * 对象.on事件名字=null; * 2.解绑事件 * 对象.addEventListener("没有on的事件类型",命名函数,false);---绑定事件 * 对象.removeEventListener("没有on的事件类型",函数名字,false); * 3.解绑事件 * 对象.attachEvent

对事件委托绑定click的事件的解绑

大家都知道解绑事件的jquery写法,很简单: $("xxx").unbind("click"); 然后对于事件委托式的事件绑定,亲测,这种解绑方法是无效的, $(".sideNav>ul").on("click", function (e) {     alert("aaa"+$(e.tagert).index()); } 即使做判断让一部分带有某个class的li标签的ul解绑click,依然无效

219 jQuery事件处理: off() 解绑事件,trigger() 、triggerHandler() 自动触发事件

? 当某个事件上面的逻辑,在特定需求下不需要的时候,可以把该事件上的逻辑移除,这个过程我们称为事件解绑.jQuery 为我们提供 了多种事件解绑方法:die() / undelegate() / off() 等,甚至还有只触发一次的事件绑定方法 one(),在这里我们重点讲解一下 off() ; 语法 演示代码 <body> <div></div> <ul> <li>我们都是好孩子</li> <li>我们都是好孩子<

javaScirpt事件详解-原生事件基础(一)

# 事件 > JavaScript与HTML之间的交互是通过事件实现的.事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间,通过监听特定事件的发生,你能响应相关的操作.**图片引用:UI Events** # 事件流 主要是当时的IE团队提出的事件流逝是事件冒泡流,而Netscape提出的是事件捕获流, 可以使用DOM2级定义的*addEventListener()*方法来处理在冒泡或者捕获阶段调用事件处理程序. ## 事件冒泡 即事件开始时由最具体的元素(文档中嵌套最深的节点)接收,然后逐级

jquery绑定事件,解绑事件

unbind([type],[data]) 是 bind()的反向操作,从每一个匹配的元素中删除绑定的事件.如果没有参数,则删除所有绑定的事件.你可以将你用bind()注册的自定义事件取消绑定.如果提供了事件类型作为参数,则只删除该类型的绑定事件.如果把在绑定时传递的处理函数作为第二个参数,则只有这个特定的事件处理函数会被删除.返回值 : jQuery参数 :type (String) : (可选) 事件类型data (Function) : (可选) 要从每个匹配元素的事件中反绑定的事件处理函

javascript 方法 / 绑定 解绑事件

很多JS插件的代码开头都是 (function(  一直不太明白    直到看到  // 事件绑定  this.bindHandler = (function() {                  if (window.addEventListener) {// 标准浏览器           return function(elem, type, handler) {// elem:节点    type:事件类型   handler:事件处理程序               // 最后一个