2010-01-29 64 views
5

每当一个mousedown或mouseup处理程序被附加到一个元素上时,dblclick不能被附加(如果附加,它将不起作用),虽然这看起来很公平,但是有什么办法可以恢复dblclick功能没有重写它从头开始(叹...) 或者我错过了关于事件传播的东西?在jQuery中既有mousedown/mouseup也有dblclick

+0

不能在任何浏览器中重现此。怀疑其他事情是错的。 – bobince 2010-01-29 12:24:09

回答

4

它的工作原理 - 地方在Firebug这个代码就是此页上,你会看到它的工作(尝试在你的问题的文本双击):

($('.post-text') 
    .mousedown(function() { console.log('down'); }) 
    .mouseup(function() { console.log('up'); }) 
    .dblclick(function() { console.log('dbclick'); })); 

不要有Firebug?去抓住它,我会等待!

+0

感谢埃米尔, 我在Opera 10.10,类似的(自制)调试代码的作品,但hapazardly: \t scrollframe \t .mousedown(函数(EVT){事件日志(EVT, '',FALSE);}) \t。 mouseup(function(evt){eventlog(evt,'',false);}) \t .dblclick(unscroll); 似乎有Opera的双击问题,再加上上下文有点复杂的非响应div区可滚动,也包含可拖动的对象。 无论如何,这是一个愚蠢的问题,因为我需要推迟对mousedown的行动,我会测试第二个mousedown仍然运行的超时。 (评论限制很烂) – Favonius 2010-01-31 18:11:55

1

你的鼠标按下和鼠标松开不能:

  1. 做e.stopPropagate等
  2. 返回假

而且,如果你的代码没有它们的方法之间的冲突,应该工作

1

虽然这个问题很老,但我想说明我是如何管理的。

此块不会工作:

 $(element).on('mousedown', function(event) { 
      ... 
     }); 

     $(element).on('dblclick', function(event) { 
      ... 
     }); 

但是你可以用这个片段创建相同的行为的处理程序:

 var clicks = 0, delay = 400; 
     $(element).on('mousedown', function(event) { 
      event.preventDefault(); 
      clicks++; 

      setTimeout(function() { 
       clicks = 0; 
      }, delay); 

      if (clicks === 2) { 
       // double click event handler should be here 
       clicks = 0; 
       return; 
      } else { 
       // mousedown event handler should be here 
      } 
     }); 
相关问题