2012-09-14 80 views
1

我有一个图像的链接,它附加了一个点击和一个可拖动的处理程序。我可以暂时禁用处理程序吗?

我想停用点击处理程序,如果我移动链接(例如,如果我拖动它)。

比,重新激活它,所以如果我只是点击后,我明白了。

我该怎么办? .unbind会删除整个处理程序,我想......

+1

你可以发表小提琴吗?解除绑定不是必需的,你可以有条件地调用'preventDefault'或返回false。但是,如果没有查看代码,没有真正的方法 –

+0

preventDefault不会停止当前的函数发生,它只会阻止事件冒泡。请参阅api.jquery.com/event.preventDefault返回false将工作,虽然:-)看到我的回答 – Flater

+0

这是情况:http:// jsfiddle。net/Wrevr/2 /(抱歉,无法在小提琴上添加jquery UI) – markzzz

回答

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; 

    } 
    }); 
}); 
1
// bind it 
$('#id').on('click', click_handler); 

// unbind it 
$('#id').off('click', click_handler); 

// bind it again 
$('#id').on('click', click_handler); 
1

您可以使用:

.unbind('click')如果使用.bind()

或:

.off('click')如果使用.on()

否则,您可以添加例外:

$('a').click(function(e) { 
    if (...) { 
     e.preventDefault(); 
    } 
}); 

编辑:

使用jQuery UI的它的工作原理没有链接的任何停止处理好的,如果你有兴趣的可以在此解决方案我做了JsFiddle

+1

preventDefault不会停止当前函数的发生,它只会阻止事件冒泡。请参阅http://api.jquery.com/event.preventDefault/ – Flater

+0

如果您对此感兴趣,我还会添加一个jQuery-ui可拖动解决方案。 –

0

代替解绑定,然后重新绑定处理程序,我认为实现一个全局变量(布尔)作为杀戮开关将更具可读性。

我看到你的问题没有任何代码段,这样我就发布一个随便举个例子:

var doNotExecute = false; 

$(".myClassItem").click(function() { 

    if(doNotExecute) return false;; 

    //Now do your normal processing. 

}); 

现在,只要你想从真正发生停止事件,你必须设置doNotExecutetrue的选项。请记住将其设置回false :-)

0

在全球范围内创建你的处理器.. 点击可能不会在拖动动作触发... 考虑到这一点,对我来说最好的办法是使用事件代表团防止未绑定事件,使用

$('#container').on('click', 'ATagClass', handler(e){/* ... */}); 

在处理程序中,您必须通过检查其类或任何属性来检查e.target是否为您的标记......确保#container始终是您的a标记的祖先。

相关问题