the*_*her 1038 jquery html-input
我有一个input type="image"
.这类似于Microsoft Excel中的单元格注释.如果有人在input-image
与之配对的文本框中输入一个数字,我会为其设置一个事件处理程序input-image
.然后当用户点击时image
,他们会得到一些弹出窗口,为数据添加一些注释.
我的问题是,当用户在文本框中输入零时,我需要禁用input-image
事件处理程序.我试过以下,但无济于事.
$('#myimage').click(function { return false; });
Run Code Online (Sandbox Code Playgroud)
sam*_*son 1600
随着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');
Run Code Online (Sandbox Code Playgroud)
在您的示例代码中,您只需向图像添加另一个单击事件,而不是覆盖前一个:
$('#myimage').click(function() { return false; }); // Adds another click event
Run Code Online (Sandbox Code Playgroud)
然后两个点击事件都会被触发.
正如人们所说,你可以使用unbind来删除所有点击事件:
$('#myimage').unbind('click');
Run Code Online (Sandbox Code Playgroud)
如果要添加单个事件然后将其删除(不删除可能已添加的任何其他事件),则可以使用事件命名空间:
$('#myimage').bind('click.mynamespace', function() { /* Do stuff */ });
Run Code Online (Sandbox Code Playgroud)
并删除您的活动:
$('#myimage').unbind('click.mynamespace');
Run Code Online (Sandbox Code Playgroud)
Mac*_*ony 63
当回答此问题时,这不可用,但您也可以使用live()方法启用/禁用事件.
$('#myimage:not(.disabled)').live('click', myclickevent);
$('#mydisablebutton').click( function () { $('#myimage').addClass('disabled'); });
Run Code Online (Sandbox Code Playgroud)
这段代码会发生什么,当您单击#mydisablebutton时,它会将禁用的类添加到#myimage元素.这将使选择器不再与元素匹配,并且在删除'disabled'类之前不会触发事件,使.live()选择器再次有效.
通过添加基于该类的样式,这还有其他好处.
Mne*_*quo 37
这可以通过使用unbind函数来完成.
$('#myimage').unbind('click');
Run Code Online (Sandbox Code Playgroud)
您可以在jquery中向同一对象和事件添加多个事件处理程序.这意味着添加新的不会取代旧的.
有几种更改事件处理程序的策略,例如事件命名空间.在线文档中有一些关于此的页面.
看看这个问题(这就是我学习unbind的方法).答案中对这些策略有一些有用的描述.
gha*_*yes 35
如果你想响应事件只是一次,下面的语法应该是非常有帮助:
$('.myLink').bind('click', function() {
//do some things
$(this).unbind('click', arguments.callee); //unbind *just this handler*
});
Run Code Online (Sandbox Code Playgroud)
使用arguments.callee,我们可以确保删除一个特定的匿名函数处理程序,从而为给定的事件提供单个时间处理程序.希望这有助于其他人.
dwh*_*urg 30
我必须使用prop和attr将事件设置为null.我无法用其中一个做到这一点.我也无法得到.unbind工作.我正在研究TD元素.
.prop("onclick", null).attr("onclick", null)
Run Code Online (Sandbox Code Playgroud)
小智 12
如果以这种方式附加事件,则目标将被取消:
$('#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.
});?
Run Code Online (Sandbox Code Playgroud)
dav*_*aus 11
您可能将onclick
处理程序添加为内联标记:
<input id="addreport" type="button" value="Add New Report" onclick="openAdd()" />
Run Code Online (Sandbox Code Playgroud)
如果是这样,jquery .off()
或.unbind()
将无法正常工作.您还需要在jquery中添加原始事件处理程序:
$("#addreport").on("click", "", function (e) {
openAdd();
});
Run Code Online (Sandbox Code Playgroud)
然后jquery有一个对事件处理程序的引用,可以删除它:
$("#addreport").off("click")
Run Code Online (Sandbox Code Playgroud)
VoidKing在上面的评论中更倾向于提到这一点.
小智 7
谢谢你的信息.非常有帮助我用它在另一个用户的编辑模式下锁定页面交互.我将它与ajaxComplete结合使用.不一定是相同的行为,但有点相似.
function userPageLock(){
$("body").bind("ajaxComplete.lockpage", function(){
$("body").unbind("ajaxComplete.lockpage");
executePageLock();
});
};
function executePageLock(){
//do something
}
Run Code Online (Sandbox Code Playgroud)
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);
Run Code Online (Sandbox Code Playgroud)
有了这个,我们将clone
取而代之的是original
没有event-handlers
它.
祝好运...
如果您用于$(document).on()
向动态创建的元素添加侦听器,则可能必须使用以下内容将其删除:
// add the listener
$(document).on('click','.element',function(){
// stuff
});
// remove the listener
$(document).off("click", ".element");
Run Code Online (Sandbox Code Playgroud)
如果.on()
方法以前与特定选择器一起使用,如以下示例所示:
$('body').on('click', '.dynamicTarget', function () {
// Code goes here
});
Run Code Online (Sandbox Code Playgroud)
这两个unbind()
和.off()
方法都没有去上班。
但是,对于与当前选择器匹配的所有元素,.undelegate()方法可用于从事件中完全删除处理程序:
$("body").undelegate(".dynamicTarget", "click")
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
687384 次 |
最近记录: |