我有一个图片链接,附有一个点击和一个可拖动的处理程序。
如果我移动链接,我想禁用点击处理程序(例如,如果我将其拖动)。
然后,重新激活它,所以如果我点击之后,我就明白了。
我该怎么办? .unbind将删除整个处理程序,我认为......
答案 0 :(得分:1)
// bind it
$('#id').on('click', click_handler);
// unbind it
$('#id').off('click', click_handler);
// bind it again
$('#id').on('click', click_handler);
答案 1 :(得分:1)
您可以使用:
如果您使用.unbind('click')
,请 .bind()
或:
如果您使用.off('click')
,请 .on()
否则您可以添加例外:
$('a').click(function(e) {
if ( ... ) {
e.preventDefault();
}
});
编辑:
使用jQuery-UI,它在链接上没有任何停止处理程序的情况下工作正常,如果您对此解决方案感兴趣,我做了 JsFiddle
答案 2 :(得分:1)
如果你的意思是,你不希望锚定点击事件在拖动过程中发生干扰,那么你可以捕获链接/锚标记上的所有点击事件,并将其与停止事件挂钩,如下:
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;
}
});
});
答案 3 :(得分:0)
我认为实现一个充当killswitch的全局变量(boolean),而不是取消绑定然后重新绑定处理程序。
我在您的问题中看不到任何代码段,因此我只是发布一个随机示例:
var doNotExecute = false;
$(".myClassItem").click(function() {
if(doNotExecute) return false;;
//Now do your normal processing.
});
现在,只要您想要阻止事件真正发生,您就可以选择将doNotExecute
设置为true
。请记住之后将其设置回false
: - )
答案 4 :(得分:0)
在全局范围内创建处理程序.. 拖动动作可能无法触发单击... 考虑到这一点,对我来说,最好的方法是使用事件委派来防止解除绑定事件,使用
$('#container').on('click', 'ATagClass', handler(e){/* ... */});
在处理程序中,您必须通过检查其类或任何属性来检查e.target是否是您的标记...确保#container始终是您的标记的祖先。