JM:I have a dream,期待和你一起去实现!
原文及译文
JM
网友:the0ther

        我有一个输入类型=“图像”。这就像Microsoft Excel中的单元格笔记一样。如果有人在输入图像配对的文本框中输入数字,我为输入图像设置了一个事件处理程序。然后,当用户点击图像,他们ge...

推荐:想去Google查资料?(你懂的)想建站?想测试?想挂机?想折腾?想要高性价比的服务器?点我!!


在jQuery中删除事件处理程序的最佳方法?(Best way to remove an event handler in jQuery?)

我有一个输入类型=“图像”。这就像Microsoft Excel中的单元格笔记一样。如果有人在输入图像配对的文本框中输入数字,我为输入图像设置了一个事件处理程序。然后,当用户点击图像时,他们会弹出一个小小的图标,为数据添加一些注释。

我的问题是,当用户输入一个零到文本框中,我需要禁用输入图像的事件处理程序。我尝试了以下,但无济于事。

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

I have an input type="image". This acts like the cell notes in Microsoft Excel. If someone enters a number into the text box that this input-image is paired with, I setup an event handler for the image. Then when the user clicks the {mark2}, they get a little popup to add some notes to the data.

My problem is that when a user enters a zero into the text box, I need to disable the {mark2}'s event handler. I have tried the following, but to no avail.

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

解决方案(由网友samjudson提供)
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

这两个点击事件将被解雇。

正如人们所说,你可以使用解除绑定来删除所有的点击事件:

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

如果你想添加一个事件,然后将其删除(不删除可能已经添加的其他事件),那么你可以使用event namespacing:

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

并只删除你的事件:

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

jQuery ≥ 1.7

With jQuery 1.7 onward the event API has been updated, .bind()/.unbind() are still available for backwards compatibility, but the preferred method is using the on()/off() functions. The below would now be,

$('#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

In your example code you are simply adding another click event to the image, not overriding the previous one:

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

Both click events will then get fired.

As people have said you can use unbind to remove all click events:

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

If you want to add a single event and then remove it (without removing any others that might have been added) then you can use event namespacing:

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

and to remove just your event:

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

推荐:想去Google查资料?(你懂的)想建站?想测试?想挂机?想折腾?想要高性价比的服务器?点我!!


关于站长

JMJavaMethod的缩写,苦逼码农一个,一直想有番作为,奈何人老力衰,只能四处膜拜大佬以获得动力。已经从单机、局域网、互联网、混到了移动互联网,未来希望能在AI世界里继续混下去。这辈子有个终极目标:财务自由,心灵自由。

近期公告

一个人苦逼开发多日,网站终于正式上线,求关注!!! 一个人苦逼多日,终于正式上线,求关注!!!

找他  
猜你喜欢
想建站?想测试?
想挂机?想折腾?
想去Google查资料?(你懂的)
想要高性价比的服务器?
搬瓦工VPS - 性价最高的美国便宜VPS主机
友情链接

冀ICP备17016304号 版权所有 © JavaMethod.com All Rights Reserved,Theme by 拼图