lor*_*Z3d 6 javascript firefox drag-and-drop draggable
Using some basic drag'n'drop features and i keep getting this message in Firefox, works well in Chrome though.
NoModificationAllowedError: Modifications are not allowed for this document
This happens when i try to use the clearData() function on the event when the ondrop event is fired.
HTML:
<!-- draggable element -->
<div draggable="true" ondragstart="onDragStart(event);">
<!-- dropzone element -->
<div ondragover="onDragOver(event);" ondragenter="onDragEnter(event);" ondrop="onDrop(event);"></div>
Run Code Online (Sandbox Code Playgroud)
JS:
function onDragStart(event) {
event
.dataTransfer
.setData('text/plain', 'test');
}
function onDragOver(event) {
event.preventDefault();
}
function onDragEnter(event) {
event.preventDefault(); // polyfill fix
}
function onDrop(event) {
event.preventDefault();
event
.currentTarget
.parentNode
.classList.add("dropped");
event
.dataTransfer
.clearData(); //<---- This is where it fails
}
Run Code Online (Sandbox Code Playgroud)
So yeah no idea how to fix this, and i need to clear the data as i set/reset some variable and internal params using it (code omitted). Works well in chrome (even IE)
小智 4
在 OnDragStart 中使用 Cleardata() 方法,而不是在 OnDrop() 方法中使用它。
onDragStart(event) {
event.dataTransfer.clearData();
event
.dataTransfer
.setData('text/plain', event.target.dataset.item);
}
Run Code Online (Sandbox Code Playgroud)
必须使用文本/纯文本。删除时必须使用 PreventDefault()。
onDragOver(event) {
event.preventDefault();
}
Run Code Online (Sandbox Code Playgroud)
必须像这样在 onDrop 方法中使用 PreventDefault 。
onDrop(event) {
const id = event
.dataTransfer
.getData('text');
const draggableElement = '';
event.preventDefault();
this.template.querySelectorAll('.example-draggable').forEach(element => {
if (element.innerHTML == id) {
this.draggableElement = element;
}
});;
if ((!event.target.innerText.includes('Drag From Here')) && (!event.target.innerText.includes('Drop Here'))) {
const bar = event.target.parentElement;
bar.appendChild(this.draggableElement);
}
else {
const bar = event.target;
bar.appendChild(this.draggableElement);
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,我在代码中间使用了 Preventdefault,这将防止在附加元素时重新加载页面。
| 归档时间: |
|
| 查看次数: |
1736 次 |
| 最近记录: |