我有一个input type="image"。这类似于Microsoft Excel中的单元格注释。如果有人在与此输入图像配对的文本框中输入数字,我将为输入图像设置一个事件处理程序。然后,当用户单击图像时,他们会看到一个小弹出窗口,向数据中添加一些注释。
我的问题是,当用户在文本框中输入0时,我需要禁用输入图像的事件处理程序。我试过以下方法,但都没用。
$('#myimage').click(function { return false; });
我有一个input type="image"。这类似于Microsoft Excel中的单元格注释。如果有人在与此输入图像配对的文本框中输入数字,我将为输入图像设置一个事件处理程序。然后,当用户单击图像时,他们会看到一个小弹出窗口,向数据中添加一些注释。
我的问题是,当用户在文本框中输入0时,我需要禁用输入图像的事件处理程序。我试过以下方法,但都没用。
$('#myimage').click(function { return false; });
当前回答
我今天在工作中遇到了一个与此相关的有趣案例,其中有一个$(window)的滚动事件处理程序。
// TO ELIMINATE THE RE-SELECTION AND
// RE-CREATION OF THE SAME OBJECT REDUNDANTLY IN THE FOLLOWING SNIPPETS
let $window = $(window);
$window.on('scroll', function() { .... });
但是,要撤销那个事件处理程序,我们不能只使用
$window.off('scroll');
因为在这个非常常见的目标上可能有其他滚动事件处理程序,我对通过关闭所有滚动处理程序来冲洗其他功能(已知或未知)不感兴趣。
我的解决方案是首先将处理程序功能抽象为一个命名函数,并在事件侦听器设置中使用它。
function handleScrollingForXYZ() { ...... }
$window.on('scroll', handleScrollingForXYZ);
然后,有条件地,当我们需要撤销它时,我这样做:
$window.off('scroll', $window, handleScrollingForXYZ);
麻烦的部分是第二个参数,它冗余地选择原始选择器。但是,.off()的jquery文档只提供了一个方法签名来指定要删除的处理程序,这要求中间的参数为
当附加事件处理程序时,选择器应该匹配最初传递给.on()的选择器。
我没有冒险用null或''作为第二个参数来测试它,但也许多余的$窗口是不必要的。
其他回答
我今天在工作中遇到了一个与此相关的有趣案例,其中有一个$(window)的滚动事件处理程序。
// TO ELIMINATE THE RE-SELECTION AND
// RE-CREATION OF THE SAME OBJECT REDUNDANTLY IN THE FOLLOWING SNIPPETS
let $window = $(window);
$window.on('scroll', function() { .... });
但是,要撤销那个事件处理程序,我们不能只使用
$window.off('scroll');
因为在这个非常常见的目标上可能有其他滚动事件处理程序,我对通过关闭所有滚动处理程序来冲洗其他功能(已知或未知)不感兴趣。
我的解决方案是首先将处理程序功能抽象为一个命名函数,并在事件侦听器设置中使用它。
function handleScrollingForXYZ() { ...... }
$window.on('scroll', handleScrollingForXYZ);
然后,有条件地,当我们需要撤销它时,我这样做:
$window.off('scroll', $window, handleScrollingForXYZ);
麻烦的部分是第二个参数,它冗余地选择原始选择器。但是,.off()的jquery文档只提供了一个方法签名来指定要删除的处理程序,这要求中间的参数为
当附加事件处理程序时,选择器应该匹配最初传递给.on()的选择器。
我没有冒险用null或''作为第二个参数来测试它,但也许多余的$窗口是不必要的。
删除所有事件处理程序,这对我来说是有效的:
删除所有事件处理程序意味着使用纯HTML结构,而不将所有事件处理程序附加到元素及其子节点。为此,jQuery的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);
这样,我们就有了一个没有事件处理程序的克隆版本来代替原始版本。
祝你好运…
我必须使用道具和attr将事件设置为null。我不能只选一个。我也无法摆脱工作的束缚。我正在做TD元素。
.prop("onclick", null).attr("onclick", null)
所有描述的方法对我来说都不起作用,因为我正在使用on()将单击事件添加到运行时创建元素的文档中:
$(document).on("click", ".button", function() {
doSomething();
});
我的解决方案:
因为我无法解开“。我只是给按钮分配了另一个类,具有相同的CSS样式。通过这样做,live/on-event-handler最终忽略了点击:
// prevent another click on the button by assigning another class
$(".button").attr("class","buttonOff");
希望这能有所帮助。
如果事件以这种方式附加,目标将被解除附加:
$('#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.
});