我正在jQuery Context Menu中尝试jQuery Draggable行jQGrid行。
我遇到的问题是,因为我添加了jQuery Context Menu,所以可以在单击时触发可拖动动作(以及正常拖动)。当我右键单击一行来获取菜单时,看起来有点奇怪,然后在另一行外面点击它(放弃菜单),然后该行开始跟随光标。
是否与jQuery上下文菜单中的以下代码段中的evt.stopPropagation();
有关?
$(this).mousedown( function(e) {
var evt = e;
evt.stopPropagation();
$(this).mouseup( function(e) {
e.stopPropagation();
var srcElement = $(this);
$(this).unbind('mouseup');
if( evt.button == 2 ) {
// Hide context menus that may be showing
$(".contextMenu").hide();
除了在可拖动菜单或上下文菜单之间进行选择外,我还能做些什么吗?
答案 0 :(得分:9)
我遇到了一个相关的问题 - 带有附加上下文菜单的可拖动项目并不总是可拖动的。在我的情况下,一个可拖动的项目(一个浮动在较大的包含div元素中的div元素)与附加的上下文菜单只能被拖动一次 - 一旦拖动完成,该项目不再可拖动,直到您单击包含div。几乎相同的没有上下文菜单的可拖动项目总是可拖动的。为什么单击容器恢复了可拖动性我不知道,但它始终如此。
感谢您的问题指向了我正确的方向,我查看了上下文菜单代码并将其修改如下,这解决了我的问题:
jQuery(this).mousedown( function(e) {
var evt = e;
if (e.button == 2) //Added to make this compatible with draggable
evt.stopPropagation();
jQuery(this).mouseup( function(e) {
if (e.button == 2) //Added to make this compatible with draggable
e.stopPropagation();
var srcElement = jQuery(this);
添加e.button == 2的检查会停止右键单击事件的传播,现在我的可拖动div可以保持拖动状态,并且上下文菜单仍然有效。到目前为止我只在IE8中对此进行了测试,我不知道它是否能解决您的问题,但我很想知道它是否存在。
== EDIT ==
Carl R建议与Chrome兼容:
jQuery(this).mousedown( function(e) {
var evt = e;
if (e.button != 2) return; //Added to make this compatible with draggable
evt.stopPropagation();
jQuery(this).mouseup( function(e) {
e.stopPropagation();
var srcElement = jQuery(this);
我按照他的建议更改了模式,这样在IE8中工作得很好。
答案 1 :(得分:4)
我有同样的问题,只是从jquery.contextMenu.js评论了前两个* .stopPropagation()。现在一切正常。
在这种情况下,这些停靠点的唯一可能用途可能是性能最低。实际上用* .preventDefault()替换它们对我来说更有意义。我错过了什么吗?