1

服務器正在運行Ruby on Rails。 Javascript是使用Coffeescript編寫的。使用contextMenu插件和fileTree插件,不會丟失可拖動的支持

我目前使用帶有上下文菜單插件的jQuery文件樹插件。目前兩者都在工作,只有一個小問題。我也在文件樹中啓用了可拖動的功能,並且在釋放左鍵單擊後它不會取消。在下圖中,鼠標已經釋放。

Mouse up but draggable hasn't cancelled

這是上加載的頁面有一個DIV:

<div id="file_tree"></div> 

而且這個div被另一個頁面,從不同的控制器填補。該代碼是:

<ul class="jqueryFileTree" style="display: none;"> 
    <% @contents[0].each do |directory| %> 
    <li class="directory collapsed"><a href="#" rel="<%= @root + directory %>/"><%= directory %></a></li> 
    <% end %> 
    <% @contents[1].each do |file| %> 
    <li class="file ext_<%= File.extname(file)[1..-1] %>"><a href="#" rel="<%= @root + file %>"><%= file %></a></li> 
    <% end %> 
</ul> 

本頁面還加載了可拖動代碼:

$ -> 
@settings = 
    revert: true 
    helper: "clone" 
    containment: "#file_tree" 
    axis: "y" 
    scroll: true 
    cursorAt: 
    top: -2 

$(".directory").draggable(@settings) 
$(".file").draggable(@settings) 

並從上下文菜單中加入這樣的:

$("#file_tree").contextMenu { menu: 'filetree_context_menu' }, (action, element, position) => 
    @on_context_menu(action, element, position, data.root_directory) 

哪裏@on_context_menu是一個簡單的函數(它雖然沒有關係到這個問題)。

如果您在#file_tree div外部單擊,則可以停止該問題(克隆會恢復其原始狀態)。但是,似乎click,mousedown和mouseup事件處理正確。此外,上下文菜單沒有問題,不會引發可拖動的問題。

關於我尋找修復,我什麼也沒找到。文件樹插件有一個很好的信息量,但上下文菜單似乎沒有任何東西(必須不受歡迎?)。沒有一個在同一時間。如果您需要其他信息,請說明。

編輯:我發現這實際上是因爲插件需要在mouseup事件中調用e.stopPropogation()以防止它打開真正的上下文菜單。任何人都知道如何手動執行stopdrag()事件?如果我打電話給$(this).trigger('stopdrag'),如果你打算這麼做,它就不起作用。

回答

0

最終解決了這個問題(經過了一段時間,並拖延得到Tumbleweed)。只是添加了一個檢查,它是被點擊的右鍵,因爲它通過在兩個點擊上運行e.stopPropagation()來破壞拖動。它比我原來的廢棄物更清潔。

if(e.button == 2) { 
    e.stopPropagation(); 
}