我有一个图像的链接,它附加了一个点击和一个可拖动的处理程序。我可以暂时禁用处理程序吗?
我想停用点击处理程序,如果我移动链接(例如,如果我拖动它)。
比,重新激活它,所以如果我只是点击后,我明白了。
我该怎么办? .unbind会删除整个处理程序,我想......
我有一个图像的链接,它附加了一个点击和一个可拖动的处理程序。我可以暂时禁用处理程序吗?
我想停用点击处理程序,如果我移动链接(例如,如果我拖动它)。
比,重新激活它,所以如果我只是点击后,我明白了。
我该怎么办? .unbind会删除整个处理程序,我想......
如果您的意思是,您不希望锚点单击事件在拖动过程中发生干涉,那么您可以捕获链接/锚点标记上的所有点击事件并将其与在拖动停止的事件,像:
var cancelFollow = false;
$(function(){
$("anchorElement").click(function(e){
e.stopPropagation();
if (cancelFollow)
{
cancelFollow = false;
return false;
}
return true;
});
$("imageElement").draggable({
....
start: function(e, ui){},
stop: function(e, ui){
cancelFollow = true;
}
});
});
// bind it
$('#id').on('click', click_handler);
// unbind it
$('#id').off('click', click_handler);
// bind it again
$('#id').on('click', click_handler);
您可以使用:
.unbind('click')
如果使用.bind()
或:
.off('click')
如果使用.on()
否则,您可以添加例外:
$('a').click(function(e) {
if (...) {
e.preventDefault();
}
});
编辑:
使用jQuery UI的它的工作原理没有链接的任何停止处理好的,如果你有兴趣的可以在此解决方案我做了JsFiddle
preventDefault不会停止当前函数的发生,它只会阻止事件冒泡。请参阅http://api.jquery.com/event.preventDefault/ – Flater
如果您对此感兴趣,我还会添加一个jQuery-ui可拖动解决方案。 –
代替解绑定,然后重新绑定处理程序,我认为实现一个全局变量(布尔)作为杀戮开关将更具可读性。
我看到你的问题没有任何代码段,这样我就发布一个随便举个例子:
var doNotExecute = false;
$(".myClassItem").click(function() {
if(doNotExecute) return false;;
//Now do your normal processing.
});
现在,只要你想从真正发生停止事件,你必须设置doNotExecute
到true
的选项。请记住将其设置回false
:-)
在全球范围内创建你的处理器.. 点击可能不会在拖动动作触发... 考虑到这一点,对我来说最好的办法是使用事件代表团防止未绑定事件,使用
$('#container').on('click', 'ATagClass', handler(e){/* ... */});
在处理程序中,您必须通过检查其类或任何属性来检查e.target是否为您的标记......确保#container始终是您的a标记的祖先。
你可以发表小提琴吗?解除绑定不是必需的,你可以有条件地调用'preventDefault'或返回false。但是,如果没有查看代码,没有真正的方法 –
preventDefault不会停止当前的函数发生,它只会阻止事件冒泡。请参阅api.jquery.com/event.preventDefault返回false将工作,虽然:-)看到我的回答 – Flater
这是情况:http:// jsfiddle。net/Wrevr/2 /(抱歉,无法在小提琴上添加jquery UI) – markzzz