我有一个input type="image" 。 这就像Microsoft Excel中的单元格注释一样。 如果有人在与该input-image配对的文本框中input-image ,我将为input-image设置一个事件处理程序。 然后,当用户单击image ,他们会弹出一个弹出窗口以向数据添加一些注释。

我的问题是,当用户在文本框中输入零时,我需要禁用input-image的事件处理程序。 我尝试了以下方法,但无济于事。

$('#myimage').click(function { return false; });

#1楼

如果event以这种方式附加,并且目标是未附加的:

$('#container').on('click','span',function(eo){alert(1);$(this).off(); //seams easy, but does not work$('#container').off('click','span'); //clears click event for every span$(this).on("click",function(){return false;}); //this works.});​

#2楼

回答此问题时该功能不可用,但是您也可以使用live()方法启用/禁用事件。

$('#myimage:not(.disabled)').live('click', myclickevent);$('#mydisablebutton').click( function () { $('#myimage').addClass('disabled'); });

此代码将发生的事情是,当您单击#mydisablebutton时,它将把禁用的类添加到#myimage元素中。 这样可以使选择器不再与该元素匹配,并且直到删除'disabled'类使.live()选择器再次有效之前,该事件才会被触发。

通过添加基于该类的样式,这还有其他好处。


#3楼

这也很好用。简单易用。请参阅http://jsfiddle.net/uZc8w/570/

$('#myimage').removeAttr("click");

#4楼

也许unbind方法将为您工作

$("#myimage").unbind("click");

#5楼

这可以通过使用unbind函数来完成。

$('#myimage').unbind('click');

您可以将多个事件处理程序添加到jquery中的同一对象和事件。 这意味着添加新的不能替代旧的。

有几种更改事件处理程序的策略,例如事件名称空间。 联机文档中有一些与此有关的页面。

看一下这个问题(这就是我学会解除绑定的方式)。 答案中对这些策略有一些有用的描述。

如何在jQuery中读取绑定的悬停回调函数


#6楼

jQuery≥1.7

从jQuery 1.7开始,事件API已更新, .bind() / .unbind()仍可用于向后兼容,但首选方法是使用on() / off()函数。 现在是

$('#myimage').click(function() { return false; }); // Adds another click event
$('#myimage').off('click');
$('#myimage').on('click.mynamespace', function() { /* Do stuff */ });
$('#myimage').off('click.mynamespace');

jQuery <1.7

在示例代码中,您只是向图像添加了另一个click事件,而不是覆盖前一个事件:

$('#myimage').click(function() { return false; }); // Adds another click event

然后,两个点击事件都会被触发。

正如人们所说,您可以使用unbind删除所有点击事件:

$('#myimage').unbind('click');

如果要添加一个事件然后将其删除(而不删除可能已添加的其他事件),则可以使用事件命名空间:

$('#myimage').bind('click.mynamespace', function() { /* Do stuff */ });

并删除您的事件:

$('#myimage').unbind('click.mynamespace');

#7楼

您可能将onclick处理程序添加为嵌入式标记:

<input id="addreport" type="button" value="Add New Report" onclick="openAdd()" />

如果是这样,jQuery的.off().unbind()将无法工作。 您还需要在jquery中添加原始事件处理程序:

$("#addreport").on("click", "", function (e) {openAdd();
});

然后,jQuery可以引用事件处理程序并可以将其删除:

$("#addreport").off("click")

VoidKing在上面的评论中更倾斜地提到了这一点。


#8楼

2014年更新

使用最新版本的jQuery,您现在可以通过简单地执行$( "#foo" ).off( ".myNamespace" );来解除绑定命名空间上的所有事件$( "#foo" ).off( ".myNamespace" );


#9楼

所描述的所有方法都不适合我,因为我将带有on()的click事件添加到了在运行时创建元素的文档中:

$(document).on("click", ".button", function() {doSomething();
});

我的解决方法:

因为我无法解除对“ .button”类的绑定,所以我只为另一个具有相同CSS样式的类分配了一个类。 这样,活动/事件处理程序最终忽略了点击:

// prevent another click on the button by assigning another class
$(".button").attr("class","buttonOff");

希望能有所帮助。


#10楼

如果您通过html设置onclick ,则需要removeAttr ($(this).removeAttr('onclick'))

如果您通过jquery进行设置(如上述示例中第一次单击后的设置),则需要unbind($(this).unbind('click'))


#11楼

删除内联onclick事件的最佳方法是$(element).prop('onclick', null);


#12楼

谢谢提供信息。 非常有用,我用它来锁定另一用户在编辑模式下的页面交互。 我将其与ajaxComplete结合使用。 不一定是相同的行为,但有些相似。

function userPageLock(){$("body").bind("ajaxComplete.lockpage", function(){$("body").unbind("ajaxComplete.lockpage");executePageLock();      });
};  function executePageLock(){//do something
}

#13楼

希望我下面的代码能解释所有问题。 HTML:

 (function($){ $("#btn_add").on("click",function(){ $("#btn_click").on("click",added_handler); alert("Added new handler to button 1"); }); $("#btn_remove").on("click",function(){ $("#btn_click").off("click",added_handler); alert("Removed new handler to button 1"); }); function fixed_handler(){ alert("Fixed handler"); } function added_handler(){ alert("new handler"); } $("#btn_click").on("click",fixed_handler); $("#btn_fixed").on("click",fixed_handler); })(jQuery); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <button id="btn_click">Button 1</button> <button id="btn_add">Add Handler</button> <button id="btn_remove">Remove Handler</button> <button id="btn_fixed">Fixed Handler</button> 

#14楼

如果.on()方法先前与特定选择器一起使用,如以下示例所示:

$('body').on('click', '.dynamicTarget', function () {// Code goes here
});

unbind().off()方法不起作用。

但是,对于与当前选择器匹配的所有元素, .undelegate()方法可用于从事件中完全删除处理程序:

$("body").undelegate(".dynamicTarget", "click")

#15楼

我知道这很晚,但是为什么不使用纯JS删除事件呢?

var myElement = document.getElementByID("your_ID");
myElement.onclick = null;

或者,如果您使用命名函数作为事件处理程序,则:

function eh(event){...}
var myElement = document.getElementByID("your_ID");
myElement.addEventListener("click",eh); // add event handler
myElement.removeEventListener("click",eh); //remove it

#16楼

remove 所有 event-handlers ,这对我有用:

删除所有事件处理程序意味着具有纯HTML structure而没有所有event handlers附加到element及其child nodes 。 为此, jQuery's clone()帮助。

var original, clone;
// element with id my-div and its child nodes have some event-handlers
original = $('#my-div');
clone = original.clone();
//
original.replaceWith(clone);

有了这个,我们将用clone代替originalclone ,上面没有event-handlers

祝好运...


#17楼

如果使用$(document).on()向动态创建的元素添加侦听器,则可能必须使用以下命令将其删除:

// add the listener
$(document).on('click','.element',function(){// stuff
});// remove the listener
$(document).off("click", ".element");

#18楼

如果你想响应事件只是一次 ,下面的语法应该是非常有帮助:

 $('.myLink').bind('click', function() {//do some things$(this).unbind('click', arguments.callee); //unbind *just this handler*});

使用arguments.callee ,我们可以确保删除一个特定的匿名函数处理程序,从而为给定事件使用单个时间处理程序。 希望这对其他人有帮助。


#19楼

我必须使用prop和attr将事件设置为null。 我不能用一个或另一个来做。 我也无法解开工作。 我正在研究TD元素。

.prop("onclick", null).attr("onclick", null)

在jQuery中删除事件处理程序的最佳方法?相关推荐

  1. react中绑定点击事件_在React中绑定事件处理程序的最佳方法

    react中绑定点击事件 by Charlee Li 通过李李 在React中绑定事件处理程序的最佳方法 (The best way to bind event handlers in React) ...

  2. jQuery中绑定事件的几种方法

    以click事件为例,jQuery中绑定事件有三种方法: (1)target.click(function(){});  (2)target.bind("click",functi ...

  3. python删除字符串中重复字符_从Python中删除字符串标点符号的最佳方法

    似乎有一个比以下更简单的方法: 1 2 3import string s ="string. With. Punctuation?" # Sample string out = s ...

  4. html 删除事件,HTML DOM removeEventListener() 方法

    HTML DOM removeEventListener() 方法 element.removeEventListener()方法将删除已与element.addEventListener()方法关联 ...

  5. 这就是为什么我们需要在React的类组件中绑定事件处理程序

    by Saurabh Misra 索拉·米斯拉(Saurabh Misra) 这就是为什么我们需要在React的类组件中绑定事件处理程序 (This is why we need to bind ev ...

  6. jquery中的事件和动画

    目录 一.jquery中的事件 1.加载DOM 2.事件绑定 3.合成事件 4.事件冒泡 5.事件对象的属性 6.移除事件 二.jquery中的动画 1.隐藏和显示 2.滑动效果 3.淡入淡出效果 三 ...

  7. vue学习:事件传递(冒泡和捕获),事件委托,jquery中的事件委托,$event 获取元素,vue事件修饰符

    事件传递 ----冒泡和捕获 DOM事件标准定义了两种事件流,这两种事件流分别是捕获和冒泡. 和许多Web技 术一样,在它们成为标准之前,Netscape和微软各自不同地实现了它们.Netscape选 ...

  8. 四、jQuery 中的事件和动画(嘎嘎详细)

    文章目录 前言 一.事件 1.1 加载 DOM 1.1.1 执行时机 1.1.2 多次使用 1.1.3 简写方式 1.2 事件绑定 1.2.1简单使用 1.2.2 简写绑定事件 1.3 合成事件 1. ...

  9. JavaScript中的事件处理程序

    JavaScript和HTML之间的交互是通过事件实现的.事件,就是文档或者浏览器窗口中发生的一些特定的交互瞬间.可以使用事件处理程序来预订事件,以便在事件发生的时候执行响应的代码.这种观察者模式的模 ...

最新文章

  1. ubuntu服务器版编辑文件,Ubuntu 服务器版 18.04.4 固定 IP 设置
  2. 斯坦福2021版图机器学习课程完结,视频、PPT全放送,大神主讲
  3. mxnet加载resnet,进行预测
  4. Scala之部分应用函数
  5. iOS端JSON转Model链式编程框架SuperKVC使用方法与原理
  6. mysql数据库中删除列的内容_如何在数据库中删除列
  7. history(路由控制)
  8. 直播用的计算机配置,直播吃鸡需要什么配置才行?
  9. OpenCV源码剖析之ImageDecoder
  10. Redis+Tomcat实现集群的Session管理
  11. PS知识点大总结(二)——通道蒙版与图形图标设计
  12. 从实战经验来看 究竟如何才能做出赚钱的量化投资策略?
  13. springboot动态添加log4j2的Appender
  14. Java中的继承与接口
  15. Java.SE01.多线程_案例01
  16. 校招失败后,在小公司熬了 2 年终于进了华为,竭尽全力....
  17. Android 蓝牙 主从关系,【实用】蓝牙主从一体模块SPP+BLE测试流程(XY-MBD07A为例)...
  18. 快速搭建一个简单的SSM框架
  19. Couldn't find include 'Atk-1.0.gir'
  20. 移动信号最好的服务器,三大运营商哪家的“信号”最好?真实体验分析

热门文章

  1. Installation error: INSTALL_FAILED_CANCELLED_BY_USER
  2. 调用startActivityForResult后直接调用onActivityResult
  3. 被relativeLayout的grivate center 折腾死了
  4. 第三周项目四-穷举法解决组合问题(1)
  5. java 获取聚合vo_NC57聚合VO写法
  6. java中输入任意一个数 分别写出他个位 十位_Java 任意输入一个整数,求各个位数之和...
  7. Instruments--CoreAnimation页面性能调试
  8. (iOS-基本知识)int long NSInteger 入门与兼容问题讲解
  9. Codeforces Educational 38 C. Constructing Tests ( 数学公式推导+暴力)
  10. LaTeX 图片插入