jQuery - 覆盖事件?

时间:2009-11-11 14:42:39

标签: javascript jquery events

我的页面包含一些可拖动的div元素( jQuery UI可拖动)。

现在我们要添加一个新功能:用户应该能够一次选择多个div并拖动这些div元素,而不会触发先前的绑定事件。

现在这是我的问题:

是否可以禁用每个mousedown的{​​{1}},mousemovemouseup事件,只要它们是选择的一部分?

基本上我想用新的替换 旧事件,然后恢复原始事件。

感谢您的时间


更新

我写了一个小脚本来测试div

jsBin demo

使用以下代码:

stopImmediatePropagation

在第一个事件之后调用$("p").click(function(event){ alert ( ' I am the old event ' ); }); $("a").click( function() { $("p").click(function(event){ event.stopImmediatePropagation(); alert ( ' I am the new event ' ); }); return false; }); 时,它不起作用。 所以输出是:

  

我是旧事件

     

我是新活动

2 个答案:

答案 0 :(得分:4)

您可以查看event.stopImmediatePropagation()

请参阅jQuery docs

中的内容

基本上你创建一个函数可选地阻止其他函数运行 - 你不需要删除和重新绑定函数。


这是来自JSBin的代码,我已修改它以使其工作。它有点hacky,可能效率不高,但它确实有效!

$("p").click(function(event){
  alert ( ' I am the old event ' );
});

$("a").click( function() {
  $("p").each(function() {
    var $t = $(this);
    var events = $t.data("events");
    $t.unbind('click');
    $t.click(function(event){
      event.stopImmediatePropagation();
      alert ( ' I am the new event ' );
    });
    for (var i = 0, l = events.length; i < l; ++i) {
      $t.click(events[i]);
    }
  });
  return false;
});

答案 1 :(得分:0)

你不能只unbind()这件事吗?

请参阅jQuery docs