我正在尝试在jQGrid中使用jQuery Draggable行的jQuery Context Menu。
我遇到的问题是,因为我添加了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();
除了在可拖动菜单和上下文菜单之间选择之外,我还能做些什么呢?
发布于 2011-07-28 05:35:50
我遇到了一个相关的问题--附加了上下文菜单的可拖动项并不总是可拖动的。在我的例子中,带有附加上下文菜单的可拖动项(浮动在较大的包含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==
根据卡尔·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中以这种方式工作得很好。
发布于 2011-12-29 03:59:57
我也有同样的问题,只是简单地注释了来自jquery.contextMenu.js的前两个*.stopPropagation()。现在一切都运行正常。
在这种情况下,这些停止的唯一可能用途可能是为了最低限度的性能。实际上,用*.preventDefault()替换它们对我来说更有意义。我是不是遗漏了什么?
https://stackoverflow.com/questions/6788566
复制相似问题