根据我目前所见,我们可以使用onPaste
事件来验证/阻止粘贴内容进入<input>
字段。同样,如果我们想验证/阻止按键,我们可以使用onkeydown
事件。我对ondrag
和ondrop
感到好奇。
具体来说,我们如何将用户拖动的内容检索到文本<input>
?如果我们想要获取整个更新的输入,我们可以使用onchange
或onblur
事件。但是,我很好奇抓住只是拖动的文字 - 类似于我们如何使用event.which
抓住只是按下的键。
文本数据是否存储在event
ondrag
或ondrop
的某个地方?并且是否采用我们可以检索的格式?
答案 0 :(得分:2)
经过多次窥探之后,我在Dottoro上发现了一个JavaScript示例,它让我陷入了兔子洞。
快速回答
event.dataTransfer.getData("Text")
假设浏览器支持dataTransfer对象,可以抓取。还有其他限制 - 例如在getData
或dragstart
dragover
上event.dataTransfer.setData("Text", newText)
始终为空的Webkit问题。
(source)
同样,使用 format
可以修改拖动的文字。 (的 Fiddle 强>)
在上面的两个样本中,&#34; Text&#34;是我们正在检索/修改的拖动内容的events.dataTransferTypes
。 Fiddle中列出了许多选项,但请注意给定&#34;拖动&#34;的可用格式。可以在//Modify the text when some specific text is dragged.
function changeDraggedText(event) {
if (event.dataTransfer) {
// Note: textData is empty here for Safari and Google Chrome :(
var textData = event.dataTransfer.getData("Text");
var newText = "..." //Modify the data being dragged BEFORE it is dropped.
event.dataTransfer.setData (format, newText);
}
}
//Access the text when the `drag` ends.
function getDraggedText(event) {
if (event.dataTransfer) {
var format = "Text";
var textData = event.dataTransfer.getData (format);
if (!textData) {
// ... There is no text being dragged.
} else {
// ... Do what you will with the textData.
}
} else {
// ... Some (less modern) browsers don't support dataTransfer objects.
}
// Use stopPropagation and cancelBubble to prevent the browser
// from performing the default `drop` action for this element.
if (event.stopPropagation) {
event.stopPropagation ();
} else {
event.cancelBubble = true;
}
return false;
}
数组中找到。
详情和背景
以下代码说明了如何使用dataTransfer对象和一些特性:
ondrop
可以绑定到ondragstart
和<div ondragstart="changeDraggedText(event)">
Dragging these contents causes the `ondragstart` event to be fired.
</div>
<div ondragenter="return false;"
ondragover="return false;"
ondrop="getDraggedText(event);">
And likewise, the `ondrop` event gets fired if I drop anything in here.
</div>
事件,如以下HTML中所示:
ondragover
警告:如果您不覆盖ondragenter
和<div>
事件,他们会将浏览视为浏览器正常处理的事件;这意味着您无法将文本拖放到非输入块(例如{{1}})。