jeditable意外触发嵌套项目上的Draggable

我正在使用jquery-ui的draragable进行拖放,并且可以进行内联编辑。

当我拖放一个也可编辑的元素时,在它被删除之后,jeditable开始并弹出“编辑模式”。

如何禁用此行为?

编辑 – 由于netsting而发生问题 – 请参阅此示例 。 我还添加了draggable混合,使示例更加真实(实际的真正问题是在我正在处理的这个网站 )

注意 – 即使这个问题因为赏金规则而得到了接受的答案,但问题仍未解决。

更新2:使用儿童()

演示2: http //jsbin.com/izaje3/2

回应你的评论

$(function() { $('.editable').editable(); $('.draggable').draggable({ drag: function(event, ui) { $(this).children('div').removeClass('editable') }, stop: function(event, ui) { $(this).children('div').addClass('editable') } }); });​ 

演示: http //jsbin.com/ihojo/2

 $(function() { $(".draggable").draggable({ drag: function(event, ui) { $(this).unbind('editable') } }); $(".editable").editable(); }); 

或者你可以这样做:

 $(function() { $('.editable').editable(); $('.draggable').draggable({ drag: function(event, ui) { $(this).removeClass('editable') }, stop: function(event, ui) { $(this).addClass('editable') } }); }); 

假设你有这样的东西:

 

注意:为了您的利益,您还可以使用handle方法!

http://jqueryui.com/demos/draggable/#handle

我发现这篇文章是因为我今天遇到了这个确切的问题(在jQuery UI Draggable中嵌套了jEditable); 虽然我不认为我的解决方案特别优雅,但我觉得我应该分享它以防其他人遇到同样的问题。

而不是尝试解除绑定并重新初始化拖动事件上的jEditable(这似乎是在stop()上重新初始化之后触发click事件),我发现将jEditable设置为使用仅在mouseup上触发的自定义事件更容易draggable没有被拖动(模拟点击)。

作为可编辑的第一个参数的匿名函数应该替换为你正在发布的url,如果这是你的事情。

http://jsbin.com/izaje3/13

 var notdragged = true; $('.editable').editable(function(value, settings) { return value; }, {event : 'custom_event' }); $('.draggable').draggable({ start: function(event, ui) { notdragged = false; } }); $('.editable').bind('mousedown', function() { notdragged = true; }).bind('mouseup', function() { if (notdragged) { $(this).trigger("custom_event"); } }); 

oftomh,你应该尝试在drop处理程序中获取Event对象,然后尝试调用event.preventDefault()event.stopImmediatePropagation()event.stopPropagation()

幸运的是,你在jQuery上。 与vanilla JS交叉浏览是令人讨厌的。

开膛手,

一种可能的解决方法是对jEditable组件使用双击事件。

为此,只需使用以下选项初始化jEditable对象:

 event: 'dblclick' 

您可以尝试在这些项目上设置contenteditable =“false”。 只需尝试在相关的html标记中添加此属性,看看发生了什么。