如何启用“可拖动”在内容可编辑的元素上?

发布于 2024-10-16 12:09:49 字数 316 浏览 8 评论 0原文

我想要一个使用 jQuery UI 同时可编辑和可拖动的 div。内容可编辑性似乎仅在未启用可拖动的情况下才起作用。我错过了什么吗?我正在使用 jQuery 1.4.4 和 jQuery UI 1.8.9

JavaScript:

$(function(){
    $('#draggable').draggable();
});  

HTML:

<div contenteditable="true" id="draggable">TEXT</div>

I'd like to have a div that is at the same time editable and draggable, using jQuery UI. Content editability seems to work only if draggable is not enabled. Am I missing something? I'm using jQuery 1.4.4 and jQuery UI 1.8.9

JavaScript:

$(function(){
    $('#draggable').draggable();
});  

HTML:

<div contenteditable="true" id="draggable">TEXT</div>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

久隐师 2024-10-23 12:09:49

虽然 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>

While the answer provided by Krule will work, there is a usability problem. The cursor will always appear at the beginning of the editable area when clicked. This makes it impossible to select text with the mouse. The only way to jump to an area of text is to use arrow keys. I don't believe this is acceptable.

The only solution I have been able to come up with is to use a "handle" for dragging:

<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>
别念他 2024-10-23 12:09:49

它正在工作,但 jQuery 可拖动正在劫持点击事件。您仍然可以使用 Tab 键进行访问。这是一个快速修复。

$('#draggable').draggable().bind('click', function(){
  $(this).focus();
})

It is working but the jQuery draggable is hijacking click event. You can still tab to it. This is a quick fix.

$('#draggable').draggable().bind('click', function(){
  $(this).focus();
})
旧人哭 2024-10-23 12:09:49

您可以为该 div 指定一个“父 div”,并​​向其父级添加 draggable 事件。然后使用官方API“取消”

HTML:

<div id="draggable">
    <div contenteditable="true" class="editable">TEXT</div>
</div>

JS:

 $('#draggable').draggable({cancel: '.editable'});

you can give this div a 'parent div' and add draggable event to it parent. then use offical API 'cancel'

HTML:

<div id="draggable">
    <div contenteditable="true" class="editable">TEXT</div>
</div>

JS:

 $('#draggable').draggable({cancel: '.editable'});
喜爱皱眉﹌ 2024-10-23 12:09:49

这让我抓狂——但是有一种方法可以在不使用拖动手柄的情况下做到这一点。
对可编辑元素使用不同的标签,并防止该元素被

http://api.jqueryui.com/draggable/#option-cancel

This has driven me nuts - but there's a way to do it without a drag handle.
Use a different tag for your editable element, and prevent that element from being
dragged
http://api.jqueryui.com/draggable/#option-cancel

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文