如何访问拖动的文本(或者:如何将文本拖动到输入“工作”?)

时间:2014-07-17 15:53:14

标签: javascript html validation browser dom-events

根据我目前所见,我们可以使用onPaste事件来验证/阻止粘贴内容进入<input>字段。同样,如果我们想验证/阻止按键,我们可以使用onkeydown事件。我对ondragondrop感到好奇。

具体来说,我们如何将用户拖动的内容检索到文本<input>?如果我们想要获取整个更新的输入,我们可以使用onchangeonblur事件。但是,我很好奇抓住只是拖动的文字 - 类似于我们如何使用event.which抓住只是按下的键。

文本数据是否存储在event ondragondrop的某个地方?并且是否采用我们可以检索的格式?

我一直在探索Dottoro文档(drag / drop)而没有运气。

1 个答案:

答案 0 :(得分:2)

经过多次窥探之后,我在Dottoro上发现了一个JavaScript示例,它让我陷入了兔子洞。

快速回答

event.dataTransfer.getData("Text") 假设浏览器支持dataTransfer对象,可以抓取。还有其他限制 - 例如在getDatadragstart dragoverevent.dataTransfer.setData("Text", newText)始终为空的Webkit问题。 (source

同样,使用 format 可以修改拖动的文字。 (的 Fiddle

在上面的两个样本中,&#34; Text&#34;是我们正在检索/修改的拖动内容的events.dataTransferTypesFiddle中列出了许多选项,但请注意给定&#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}})。