前端有时会碰到这样的需求: 点击某个元素发送ajax请求, 发送期间此元素的鼠标相关事件(比如点击)无效, 发送完成鼠标点击事件功能恢复,

对于这种需求, 我们会遇到两种情况,

一种是点击的按钮为form表单元素,

例如是  type="submit"的button的话, 由于是表单元素, 可使用属性 disabled 禁用

第二种是非form表单元素,

例如是一个div元素, 非表单元素不存在 disabled 属性, 可使用 pointer-events: none 这个css属性禁用此元素的鼠标事件

但pointer-events不支持ie11以下的ie浏览器, 如果你的项目不需要兼容ie11以下, 下面的可以略过不看,

下面是我们要重点说的使用jq解决的方法:

方法一:

function func(){..}
// 绑定
$(document).on('click.bar', '.foo', func)
// 取消绑定
$(document).off('click.bar', '.foo')
// 重新绑定
$(document).on('click.bar', '.foo', func)

即将事件函数声明为命名函数而不是匿名函数, 适用于事件函数已命名并且函数变量易于获取的情况,

若情况不适用, 则考虑方法二

方法二:

  <a href="javascript:;" id="button">button</a>
<div class="unbind">unbind</div>
<div class="rebind">rebind</div>
    // 为#button动态(委托)绑定事件
  $(document).on('click', 'a#button', function(){
console.log(0);
});
$(document).on('click', 'a#button', function(){
console.log(1);
});
  // 为#button直接绑定事件
$('a#button').on('click', function(){
console.log(2);
}); $(document).on('click', '.unbind', function(){
$('a#button').on('click.disable', false);
    });

    $('.rebind').click(function () {
$('a#button').off('click.disable');   })

点击button, 会依次打印 2 0 1, 因为直接绑定事件是直接将事件函数绑定在当前调用的元素上, 而动态绑定依靠事件冒泡捕捉元素动态绑定, 所以 2 先于 0 1被打印出来

点击.unbind 元素后, 所有动态绑定的事件函数都不会执行, 直接绑定的事件函数正常执行, 会打印 2

点击.rebind 元素后, 动态绑定的事件函数正常执行, 会依次打印 2 0 1

注意两点:

此取绑/重绑方法只适用于动态绑定事件

取绑/重绑事件上要加上命名空间, 比如'.disable', 否则$('a#button').off()时, 所有直接绑定的事件都会被off(解绑)

jq 事件取消绑定与重新绑定的更多相关文章

  1. jQuery---jQ动画(普通,滑动,淡入淡出,自定义动画,停止动画),jQuery的事件,jQ事件的绑定/解绑,一次性事件,事件委托,事件冒泡,文档加载

    jQuery---jQ动画(普通,滑动,淡入淡出,自定义动画,停止动画),jQuery的事件,jQ事件的绑定/解绑,一次性事件,事件委托,事件冒泡,文档加载 一丶jQuery动画 show,hide, ...

  2. jq事件绑定

    有些时候我们在页面中会动态的添加一下dom结构,当我们想要给这些结点添加事件时需要在此节点绑定一系列的操作. <a href="#" onclick="addBtn ...

  3. jquery 用addClass之后 class有对应的事件,为什么要重新绑定一下事件呢

    假设有元素A,B,C,其中A和B都有class属性cls,如果在页面加载完成时,给具有class属性为cls的元素绑定某一事件,例如click,执行事件时调用alert.也就是说,页面加载完成后A和B ...

  4. one(type,[data],fn) 为每一个匹配元素的特定事件(像click)绑定一个一次性的事件处理函数。

    one(type,[data],fn) 概述 为每一个匹配元素的特定事件(像click)绑定一个一次性的事件处理函数. 在每个对象上,这个事件处理函数只会被执行一次.其他规则与bind()函数相同.这 ...

  5. React入门---事件与数据的双向绑定-9

    上一节中,我们是从父组件给子组件传送数据,要实现事件与数据的双向绑定,我们来看如何从子组件向父组件传送数据; 接触之前,我们看一些里面函数绑定的知识: 例:通过点击事件改变state的age属性值: ...

  6. 【Angular 5】数据绑定、事件绑定和双向绑定

    本文为Angular5的学习笔记,IDE使用Visual Studio Code,内容是关于数据绑定,包括Property Binding.Class Binding.Style Binding. 在 ...

  7. jquery绑定事件的坑,重复绑定问题

    我实现点击table表格中的删除按钮,找到当前按钮的祖先元素tr 然后删除该行,但是我首先点击删除的时候要先弹出提示框,是否要下载,这时在点击删除按钮删除,之前没有考虑到事件重复绑定问题,所以每次点击 ...

  8. 巨蟒python全栈开发数据库前端6:事件onclick的两种绑定方式&&onblur和onfocus事件&&window.onload解释&&小米商城讲解

    1.回顾上节内容(JavaScript) 一.JavaScript概述 1.ECMAScript和JavaScript的关系 2.ECMAScript的历史 3.JavaScript是一门前后端都可以 ...

  9. jq事件

    1,ready:当DOM载入就绪可以查询及操纵时绑定一个要执行的函数,在使用之前必须确保body元素的onload事件,,没有注册函数,否则不会触发ready函数. $(document).ready ...

随机推荐

  1. WebSocket原理与实践(三)--解析数据帧

    WebSocket原理与实践(三)--解析数据帧 1-1 理解数据帧的含义:   在WebSocket协议中,数据是通过帧序列来传输的.为了数据安全原因,客户端必须掩码(mask)它发送到服务器的所有 ...

  2. Android开发中代码下面出现波浪线问题

    在Android Studio中写代码时,经常会在一个英文单词的下面出现波浪线,这是因为系统检测到你的这个英文单词不符合规范,如下所示: 解决办法:选中这个单词,点击鼠标右键,点击:Spelling ...

  3. Android 让图片等比例缩放的三种方法

    方法一:客户端等比例 前提条件:服务器端需要返回原始图片的“宽和高”或者“宽高缩放比例”,客户端要显示的图片的宽或者高只要其一是固定的(例如:高度为200,宽度未知,或者高度为400宽度未知) 在这种 ...

  4. SkylineGlobe API 如何以图层的方式导入MPT地形

    测试环境:TerraExplorer Pro 6.6; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&qu ...

  5. 初步了解Owin

      OWIN英文全称是Open Web Interface for .NET. 仅从字面意思看OWIN是针对.net平台的开放web接口. 那Web接口是谁和谁之间的接口呢?是Web应用程序与Web服 ...

  6. BZOJ3149 CTSC2013 复原 搜索

    传送门 \(N \leq 20\)很适合暴搜-- 第二问最大独立集裸题,\(O(2^NN)\)的算法都能过-- 考虑第一问,使用搜索寻找可行解 每一次枚举一条弦的两个端点,通过位运算计算与其相交的弦的 ...

  7. UVA10720 Graph Construction 度序列可图性

    Luogu传送门(UVA常年上不去) 题意:求一个度序列是否可变换为一个简单图.$\text{序列长度} \leq 10000$ 题目看起来很简单,但是还是有一些小细节需要注意首先一个简单的结论:一张 ...

  8. (转)Putty server refused our key的三种原因和解决方法

    原文 上一篇博文介绍了使用Putty免密码登录,我后面试了另一台虚拟机,结果putty显示错误server refused our key(在linux下则表现为仍需要输入密码),搜索了下,很多人都遇 ...

  9. Luogu P1439 【模板】最长公共子序列

    又是模板题呵,但这次的难度有点增加. 先看题目第一个想到DP的经典算法,要O(n^2),然后想其它的算法. 其实我们衢州市一次联考有一题很像这题,不过还要难一点. 思想是离散化+最长不下降子序列(在这 ...

  10. [开源 .NET 跨平台 Crawler 数据采集 爬虫框架: DotnetSpider] [二] 基本使用

    [DotnetSpider 系列目录] 一.初衷与架构设计 二.基本使用 三.配置式爬虫 四.JSON数据解析与配置系统 五.如何做全站采集 使用环境 Visual Studio 2017 .NET ...