我有一个带有图像的链接,其中附加了一个单击和一个可拖动的处理程序。
如果我移动链接(例如,如果我拖动它),我想禁用点击处理程序。
比,重新激活它,所以如果我点击后,我就明白了。
我能怎么做?.unbind 将删除整个处理程序,我认为......
// 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
如果您的意思是,您不希望锚点击事件在拖动过程中受到干扰,那么您可以捕获链接/锚标签上的所有点击事件并将其与可拖动的停止事件挂钩,例如:
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;
}
});
});
在全局范围内创建您的处理程序..单击可能不会在拖动操作时触发...考虑到这一点,对我来说,最好的方法是使用事件委托来防止解除绑定事件,使用
$('#container').on('click', 'ATagClass', handler(e){/* ... */});
在处理程序内部,您必须通过检查 e.target 的类或任何属性来检查它是否是您的标签……确保 #container 始终是您的 a 标签的祖先。
我认为与其解除绑定然后重新绑定处理程序,不如实现一个用作 killswitch 的全局变量(布尔值)更具可读性。
我在您的问题中没有看到代码片段,所以我将发布一个随机示例:
var doNotExecute = false;
$(".myClassItem").click(function() {
if(doNotExecute) return false;;
//Now do your normal processing.
});
现在,您可以选择设置为何时doNotExecute
想要true
阻止事件真正发生。请记住将其设置回false
之后:-)