服务器正在运行 Ruby on Rails。Javascript 是使用 Coffeescript 编写的。
我目前正在使用带有上下文菜单插件的 jQuery 文件树插件。目前两者都在工作,但有一个小问题。我还在文件树中启用了可拖动,并且在释放左键后它不会取消。在下图中,鼠标已经被释放。
加载的页面有一个 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') 以防你建议这样做,它不起作用。