我希望使用jQuery UI同时具有可编辑和可拖动的div。内容可编辑性似乎仅在未启用可拖动时才有效。我错过了什么吗?我正在使用jQuery 1.4.4和jQuery UI 1.8.9
JavaScript:
$(function(){
$('#draggable').draggable();
});
HTML:
<div contenteditable="true" id="draggable">TEXT</div>
答案 0 :(得分:16)
虽然Krule提供的答案可行,但存在可用性问题。单击时,光标将始终显示在可编辑区域的开头。这使得用鼠标选择文本成为不可能。跳转到文本区域的唯一方法是使用箭头键。我不相信这是可以接受的。
我能够提出的唯一解决方案是使用“句柄”进行拖动:
<style>
.positionable {
position:absolute;
width:400px; height:200px;
}
.drag_handle {
position:absolute;
top:-8px; left:-8px;
background-color:#FFF; color:#000;
width:14px; height:14px;
cursor:move;
font-size:14px; line-height:14px;
font-weight:bold;
text-align:center;
border:1px solid #000;
}
.editable {
outline:none;
width:100%; height:100%;
}
</style>
<div class="positionable">
<div class="drag_handle">+</div>
<div class="editable" contentEditable="TRUE">type here...</div>
</div>
<script>
$('.positionable').draggable({handle: '.drag_handle'});
</script>
答案 1 :(得分:13)
它正在运行,但jQuery draggable是劫持点击事件。你仍然可以选择它。这是一个快速解决方案。
$('#draggable').draggable().bind('click', function(){
$(this).focus();
})
答案 2 :(得分:1)
这让我疯狂 - 但是有一种方法可以在没有拖动手柄的情况下做到这一点。 为可编辑元素使用不同的标记,并防止该元素出现 拖 http://api.jqueryui.com/draggable/#option-cancel
答案 3 :(得分:0)
您可以将此div设为“父div”并将draggable
事件添加到其父级。然后使用官方API'取消'
HTML:
<div id="draggable">
<div contenteditable="true" class="editable">TEXT</div>
</div>
JS:
$('#draggable').draggable({cancel: '.editable'});