我有一个input type="image"。这类似于Microsoft Excel中的单元格注释。如果有人在与此输入图像配对的文本框中输入数字,我将为输入图像设置一个事件处理程序。然后,当用户单击图像时,他们会看到一个小弹出窗口,向数据中添加一些注释。
我的问题是,当用户在文本框中输入0时,我需要禁用输入图像的事件处理程序。我试过以下方法,但都没用。
$('#myimage').click(function { return false; });
我有一个input type="image"。这类似于Microsoft Excel中的单元格注释。如果有人在与此输入图像配对的文本框中输入数字,我将为输入图像设置一个事件处理程序。然后,当用户单击图像时,他们会看到一个小弹出窗口,向数据中添加一些注释。
我的问题是,当用户在文本框中输入0时,我需要禁用输入图像的事件处理程序。我试过以下方法,但都没用。
$('#myimage').click(function { return false; });
当前回答
所有描述的方法对我来说都不起作用,因为我正在使用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");
希望这能有所帮助。
其他回答
也许解绑定方法对您有用
$("#myimage").unbind("click");
谢谢你提供的信息。非常有用,我用它来锁定页面交互,而在编辑模式下的另一个用户。我将它与ajaxComplete结合使用。不一定是相同的行为,但有些相似。
function userPageLock(){
$("body").bind("ajaxComplete.lockpage", function(){
$("body").unbind("ajaxComplete.lockpage");
executePageLock();
});
};
function executePageLock(){
//do something
}
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
在你的示例代码中,你只是在图像中添加了另一个点击事件,而不是覆盖前一个:
$('#myimage').click(function() { return false; }); // Adds another click event
这两个单击事件都将被触发。
正如人们所说,你可以使用unbind删除所有点击事件:
$('#myimage').unbind('click');
如果你想添加一个事件,然后删除它(不删除任何其他可能已添加的事件),那么你可以使用事件命名空间:
$('#myimage').bind('click.mynamespace', function() { /* Do stuff */ });
然后删除你的事件:
$('#myimage').unbind('click.mynamespace');
如果你只想响应一个事件一次,下面的语法应该很有帮助:
$('.myLink').bind('click', function() {
//do some things
$(this).unbind('click', arguments.callee); //unbind *just this handler*
});
使用参数。被调用者,我们可以确保删除一个特定的匿名函数处理程序,因此,对于给定的事件只有一个时间处理程序。希望这能帮助到其他人。
如果你使用$(document).on()向动态创建的元素添加监听器,那么你可能必须使用以下方法来删除它:
// add the listener
$(document).on('click','.element',function(){
// stuff
});
// remove the listener
$(document).off("click", ".element");