gpt4 book ai didi

javascript - contenteditable div 中的 HTML5 可拖动元素 - 在第一次放置后停止工作 - 为什么?

转载 作者:太空狗 更新时间:2023-10-29 13:12:29 25 4
gpt4 key购买 nike

我正在尝试创建一些可拖动的元素( token ),这些元素可以在 contenteditable div 中四处拖动。似乎一切正常,除了......在我拖放一个元素后,我无法再次拖动它。看来我无法再次绑定(bind)到它的 dragstart 事件。

知道为什么会发生这种情况吗?我该如何解决?

这是我的 fiddle 的链接:http://jsfiddle.net/gXScu/1/

HTML:

<div id="editor" contenteditable="true">
Testime siinkohal seda, et kuidas<br />
on võimalik asja testida.
<span class="draggable" draggable="true" contenteditable="false">Token</span>
</div>
<span class="draggable" draggable="true" contenteditable="false">Token 2</span>

Javascript (jQuery)

var bindDraggables = function() {
console.log('binding draggables', $('.draggable').length);
$('.draggable').off('dragstart').on('dragstart', function(e) {
if (!e.target.id)
e.target.id = (new Date()).getTime();
e.originalEvent.dataTransfer.setData('text/html', e.target.outerHTML);
console.log('started dragging');
$(e.target).addClass('dragged');
}).on('click', function() {
console.log('there was a click');
});
}

$('#editor').on('dragover', function (e) {
e.preventDefault();
return false;
});

$('#editor').on('drop', function(e) {
e.preventDefault();
var e = e.originalEvent;
var content = e.dataTransfer.getData('text/html');
var range = null;
if (document.caretRangeFromPoint) { // Chrome
range = document.caretRangeFromPoint(e.clientX, e.clientY);
}
else if (e.rangeParent) { // Firefox
range = document.createRange();
range.setStart(e.rangeParent, e.rangeOffset);
}
console.log('range', range)
var sel = window.getSelection();
sel.removeAllRanges(); sel.addRange(range);

$('#editor').get(0).focus(); // essential
document.execCommand('insertHTML',false, content);
//$('#editor').append(content);
sel.removeAllRanges();
bindDraggables();
console.log($('[dragged="dragged"]').length);
$('.dragged').remove();
});

bindDraggables();

CSS:

#editor {
border: 2px solid red;
padding: 5px;
}
.draggable {
display: inline-block;
padding: 3px;
background: yellow;
cursor: move !important;
}

最佳答案

我也尝试了一些 hack,但似乎都不起作用。我正在检查 HTML,我发现在您的示例中,新插入的 content 没有分配任何 contenteditable 属性,当我手动分配给它时,它开始工作正常。

这是我的代码 http://jsfiddle.net/gXScu/8/

我刚刚添加了这一行

$('.draggable').attr("contenteditable", false);bindDraggables 方法中。

我同意 Reinmar 关于 contenteditable 的解释。

关于javascript - contenteditable div 中的 HTML5 可拖动元素 - 在第一次放置后停止工作 - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16900032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com