2009-07-08 63 views
1

我在同一頁面上運行thickbox和jQuery UI可拖動,並且它們是衝突的。Jquery - 如何運行一個函數onclick只有當鏈接沒有拖動?

jQuery UI的可拖動可以讓我將它從一個地點放置的東西到另一個與此代碼:

$(".droppable").droppable({ 
     drop: function(ev, ui) { 
      do stuff 
} 
}); 

ThickBox的啓動上一個點擊事件,有本質上的代碼:

$(".thickbox").click(function(){ 
thickbox functions... 
}); 

但因爲thickbox鏈接位於可拖動div內,所以當我拖動鏈接時,它會打開thickbox!因此,這個問題。

我怎樣才能改變這種代碼,以便:

  1. 當我拖動鏈接,它不會不開ThickBox的。
  2. 當我點擊鏈接(不拖動)時,它會打開thickbox。

謝謝!

+0

這很奇怪,onmouseup事件不起作用。不幸的是,我沒有在我的任何項目中使用thickbox,所以我可以嘗試一下。 – 2009-07-08 08:01:18

回答

2

檢查元素是否在顯示thickbox之前被拖動。 或拖動時禁用thickbox事件處理程序。

如:

$(".thickbox").mouseup(function(){ 
    if (is_being_dragged()) return; 
    // thickbox functions... 
}); 

is_being_dragged()會檢查標誌由拖動功能設置。拖動功能應該在拖動標誌完成後取消設置。

您還可以通過使點擊函數成爲onmousedown,然後使用onmouseup來獨立於所使用的拖動函數來解決此問題。

$(".thickbox").mousedown(function(){ 
    this.__down = new Date().getTime(); 
}); 

$(".thickbox").mouseup(function(){ 
    var interval = new Date().getTime() - this.__down; 
    // assume dragged if it was pressed 50 millisecs or more ago 
    if (interval > 50) { return } 
}); 

假設拖動需要50毫秒以上,而點擊次數更少。你可以看到你的情況最好。