使用jquery的可拖动和可点击的输入元素
我在可拖动的div中有一个输入元素。 我的代码应该做以下事情:
- 当我拖动我的输入元素时,应该拖动整个可拖动的div。 (实现),
- 当我点击输入元素时,我应该能够编辑文本。 (无法完成)
那么,有人可以告诉我如何单击和编辑可拖动的输入元素的文本吗?
这是我的完整代码:
Draggable and Clickable Input .draggable{height:500px;width:500px;background:blue;} $('.draggable').draggable({ cancel: '' });
$('.draggable input').click(function() { $(this).focus(); });
输入字段现在是可编辑的,您仍然可以从输入字段拖动整个div。 JSFiddle 。
您可以派遣事件,例如:
-DEMO-
$(".draggable").draggable({ start: function (event, ui) { $(this).data('preventBehaviour', true); } }); $(".draggable :input").on('mousedown', function (e) { var mdown = document.createEvent("MouseEvents"); mdown.initMouseEvent("mousedown", false, true, window, 0, e.screenX, e.screenY, e.clientX, e.clientY, true, false, false, true, 0, null); $(this).closest('.draggable')[0].dispatchEvent(mdown); }).on('click', function (e) { var $draggable = $(this).closest('.draggable'); if ($draggable.data("preventBehaviour")) { e.preventDefault(); $draggable.data("preventBehaviour", false) } });
您可以尝试将contenteditable
属性添加到div中:
HTML
JQuery的
$(".draggable").draggable() .click(function() { $(this).draggable( {disabled: false}); }).dblclick(function() { $(this).draggable({ disabled: true }); });
的jsfiddle
真的很老问题,但我有一个稍微不同的解决方案,所以回答这里。
通过在可拖动的初始化程序中设置cancel属性来禁用input
元素的可拖动。 我认为在大多数情况下这是一个小小的妥协。 但是YMMV。
$(".card").draggable({ cancel: "input" });