2010-01-29 61 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 
      } 
     }); 
相關問題