1

服务器正在运行 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') 以防你建议这样做,它不起作用。

4

1 回答 1

0

最终解决了这个问题(经过很长一段时间,并且在拖延获得风滚草的同时)。刚刚添加了一个检查,它是被点击的正确按钮,因为它通过在两次点击上运行 e.stopPropagation() 来打破拖动。它比我废弃的原始解决方法要干净得多。

if(e.button == 2) {
  e.stopPropagation();
}
于 2012-03-30T20:17:20.190 回答