1

我有一个带有图像的链接,其中附加了一个单击和一个可拖动的处理程序。

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

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

我能怎么做?.unbind 将删除整个处理程序,我认为......

4

5 回答 5

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

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

// bind it again
$('#id').on('click', click_handler);
于 2012-09-14T09:03:48.870 回答
1

您可以使用:

.unbind('click')如果你用过.bind()

或者:

.off('click')如果你用过.on()

否则,您可以添加一个例外:

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

编辑:

使用 jQuery-UI 它可以在链接上没有任何停止处理程序的情况下正常工作,如果您对此解决方案感兴趣,我做了一个JsFiddle

于 2012-09-14T09:04:20.313 回答
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;

    }
  });
});
于 2012-09-14T09:09:17.107 回答
0

在全局范围内创建您的处理程序..单击可能不会在拖动操作时触发...考虑到这一点,对我来说,最好的方法是使用事件委托来防止解除绑定事件,使用

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

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

于 2012-09-14T09:14:50.857 回答
0

我认为与其解除绑定然后重新绑定处理程序,不如实现一个用作 killswitch 的全局变量(布尔值)更具可读性。

我在您的问题中没有看到代码片段,所以我将发布一个随机示例:

var doNotExecute = false;

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

    if(doNotExecute) return false;;

    //Now do your normal processing.

});

现在,您可以选择设置为何时doNotExecute想要true阻止事件真正发生。请记住将其设置回false之后:-)

于 2012-09-14T09:05:14.470 回答