使用 JS / jQuery 启用/禁用 DOM 元素的事件

2024-03-29

我遇到了一个小问题,我花了很多时间来解决这个问题,与它的功能相比,这个问题相当糟糕。

我的 DOM 中有标签,并且我已经使用 jQuery 将多个事件绑定到它们。

var a = $('<a>').click(data, function() { ... })

有时我想禁用其中一些元素,这意味着我向其添加“禁用”CSS 类,并且我想删除所有事件,这样就不再触发任何事件。我在这里创建了一个名为“Button”的类来解决这个问题

var button = new Button(a)
button.disable()

我可以使用 $.unbind 从 jQuery 对象中删除所有事件。但我也想要相反的功能

button.enable()

它将所有事件与所有处理程序绑定回元素 或者 也许 jQuery 中有一个功能实际上现在可以做到这一点?!

我的按钮类看起来与此类似:

Button = function(obj) {
  this.element = obj
  this.events = null

  this.enable = function() {
    this.element.removeClass('disabled')
    obj.data('events', this.events)
    return this
  }

  this.disable = function() {
    this.element.addClass('disabled')
    this.events = obj.data('events')
    return this
  }
}

有任何想法吗?特别是在禁用 -> 启用后,此重新绑定功能必须可用

var a = $('<a>').click(data, function() { ... })

我发现这些来源对我不起作用:http://jquery-howto.blogspot.com/2008/12/how-to-disableenable-element-with.html http://jquery-howto.blogspot.com/2008/12/how-to-disableenable-element-with.html

http://forum.jquery.com/topic/jquery-temporarily-disabling-events http://forum.jquery.com/topic/jquery-temporarily-disabling-events-> 我没有在按钮类中设置事件

感谢你的帮助。


$("a").click(function(event) {
    event.preventDefault(); 
    event.stopPropagation(); 
    return false;
});

返回 false 非常重要。

或者您可以编写自己的启用和禁用函数来执行以下操作:

function enable(element, event, eventHandler) {
    if(element.data()[event].eventHandler && !eventHandler) { //this is pseudo code to check for null and undefined, you should also perform type checking
        element.bind(event, element.data()[event]);

    }
    else (!element.data()[event] && eventHandler) {
        element.bind(event, element.data()[event]);
        element.data({event: eventHandler}); //We save the event handler for future enable() calls
    }
}

function disable(element, event) {
    element.unbind().die();
}

这不是完美的代码,但我相信您已经了解基本概念了。调用enable时从元素DOM数据恢复旧的事件处理程序。缺点是您必须使用enable()来添加可能需要disable()的任何事件侦听器。否则,事件处理程序将不会保存在 DOM 数据中,并且无法再次使用 enable() 恢复。目前,没有万无一失的方法来获取元素上所有事件侦听器的列表。这将使工作变得更加容易。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 JS / jQuery 启用/禁用 DOM 元素的事件 的相关文章

随机推荐

  • 编辑中的字段唯一(已采用)?

    当我编辑用户时 我遇到验证问题 因此 当我编辑时 我收到消息称该名称已被占用 我怎样才能解决这个问题 因为该名称属于该用户 所以我需要再次更改名称 以便我可以编辑我的用户 if user gt business user this gt v
  • 如何编辑 Visual Studio Code 的默认深色主题?

    我使用的是 Windows 7 64 位 有没有办法在 Visual Studio Code 中编辑默认的深色主题 在 USERPROFILE vscode文件夹中只有扩展中的主题 而在安装路径中 我使用默认值 C Program File
  • Windows Azure /Windows Server 2008 R2 中的 NAudio

    我在用NAudio http naudio codeplex com 将几个 mp3 文件合并在一起以形成 Windows Azure 产品 它在开发环境中工作正常 但一旦我将其上传到 Azure 我就会收到 无驱动器调用 acmForma
  • Java 中的 \x 转义?

    我想知道 Java 中是否有类似 C 中的十六进制 x 转义 例如 char helloworld x48 x45 x4C x4C x4F x20 x57 x47 x52 x4C x44 printf s helloworld 从目前看来
  • Vaadin:如何将 META-INF/服务添加到战争中?

    我有一个 Vaadin 7 maven Web 项目 其中有一些注释可以在其上创建服务定义META INF services 我将其添加到 pom 中 以便处理注释
  • GCP Pub/Sub,如果已经有活动订阅,您可以在新订阅上重播旧消息吗

    在 GCP Pub Sub 中 我有一个主题和一个Subscription1并已开始发布消息 我可以添加另一个订阅吗Subscription2并重播之前发布的旧消息Subscription2被创造了 它会允许吗 卡夫卡允许 在什么时候我会失
  • C++ 模板正式排序规则

    我很难理解 D Vandevoorde 和 N M Josuttis 所著的 C 模板完整指南 一书第 12 章中描述的正式排序规则的工作原理 在本书第 188 页 作者给出了以下场景 用于确定两个可行的函数模板中哪一个更专业 从这两个模板
  • Flutter - 获取 SHA-1 证书 - Android Studio 3.2.1

    我正在尝试检索我的 Flutter 项目的 SHA 1 指纹证书 这通常可以通过进入 Android Studio 右侧的 Gradle 面板并单击signingReport 然而问题是 在 Flutter 中 它根本不显示 Gradle
  • Laravel 可以处理高流量应用程序吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在开发一个 PHP MySQL 社交网络项目 该项目将包含许多模块 部分 包括 用户系统 权限 配置文件 设置等 stackoverflow
  • Tomcat 9 的 Maven 插件

    除了 tomcat7 maven plugin 之外 我没有找到任何 tomcat maven plugin 我可以将其与 apache tomcat 9 0 0 M15 一起使用吗 您可以使用该插件部署到单独运行的 tomcat 9 Th
  • 自定义样式的 AlertDialog 的样式属性

    我正在尝试设计我的 AlertDialog 的样式 并且我已经能够通过样式和 xml 声明更改其中的大部分内容 但仍然存在一些问题 如何将标题栏周围的区域从黑色更改为我的自定义颜色 如何将外部背景更改为透明 阴影落在蓝色的外部部分 如何更改
  • “yes”这个程序有什么重要用途吗?

    当我第一次遇到yes nix 中的程序我想不出它有什么重要用途 这个程序是如何使用的 yes旨在自动化需要在采取行动之前确认的交互式程序 yes rm ri foo 大致相当于 rm rf foo 不同之处在于 f失败时也会继续
  • Rails 4 jQuery 与 javascript 冲突

    我正在尝试在 Rails 4 中制作一个应用程序 我正在挣扎 我正在尝试合并引导主题 但我遇到了供应商 JavaScript 和其余代码的问题 我认为问题可能与我的 application js 中的 jQuery 以及以 符号开头的供应商
  • 按名称实例化 Java lambda 函数

    我想在 Java 8 中创建一个 lambda 函数 获取它的类名 然后从它的类名再次实例化该函数 这就是我尝试的 import java util function Consumer public class SimpleLambda p
  • ajax 与常规表单数据的安全性

    只是想知道安全性的差异
  • Websphere Application Server 6.1(本地化):覆盖控制台消息的区域设置

    我已经安装了西班牙语版本的 RAD 7 5 基于 Eclipse Ganymede 3 4 0 我正在与Websphere 应用程序服务器 6 1 也是西班牙语 我遇到的问题是所有控制台消息都以西班牙语显示 但在我个人看来 翻译相当差 特别
  • 如何处理来自代理的额外 HTTP 标头?

    我们的环境需要使用出站代理来提供异地服务 通常这不是问题 在 Twilio 的这种情况下 返回的额外标头会破坏客户端 传出标头 POST 2010 04 01 Accounts FOO SMS Messages json HTTP 1 1
  • 如何提取双精度数的尾数

    我想将双精度数的尾数存储在变量中 我发布了一个代码来获取 double 的二进制表示形式 点击这里 https stackoverflow com questions 5670221 binary representation of a f
  • 使用 jQuery.getJson 获取 Web API [重复]

    这个问题在这里已经有答案了 我是 ASP NET Web API 的初学者 使用失败jQuery getJson to get ASP NET Web API 这失败了 var url http localhost 56110 api Va
  • 使用 JS / jQuery 启用/禁用 DOM 元素的事件

    我遇到了一个小问题 我花了很多时间来解决这个问题 与它的功能相比 这个问题相当糟糕 我的 DOM 中有标签 并且我已经使用 jQuery 将多个事件绑定到它们 var a a click data function 有时我想禁用其中一些元素