代码之家  ›  专栏  ›  技术社区  ›  jantimon

jquery-覆盖事件?

  •  2
  • jantimon  · 技术社区  · 15 年前

    我的页面包含一些可拖动的 div 要素( jquery用户界面可拖动)。

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

    现在我的问题是:

    是否可以禁用 mousedown , mousemove mouseup 每个事件 div 只要它们是选择的一部分?

    所以基本上我想 代替 这个 旧事 一个新的和 之后恢复 最初的事件。

    谢谢你抽出时间


    更新:

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

    jsBin demo

    使用以下代码:

    $("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;
    });
    

    它不能像 event.stopImmediatePropagation(); 在第一个事件之后调用。 所以输出是:

    我是老事件

    我是新活动

    2 回复  |  直到 15 年前
        1
  •  4
  •   nickf    15 年前

    你可以看看 event.stopImmediatePropagation() .

    在这里看到 jQuery docs

    基本上,您可以选择让一个函数阻止其他函数运行-您不需要删除和重新绑定这些函数。


    这是我修改过的jsbin代码,可以让它正常工作。它有点老土,可能不是很有效率,但它工作!

    $("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;
    });
    
        2
  •  0
  •   Josh Stodola    15 年前

    难道你不能 unbind() 事件?

    jQuery docs