如何访问拖动的文本(或:如何将文本拖动到输入“工作”中?)
How to Access Dragged Text (Or: How Does Dragging Text into an Input "Work"?)
从我目前所看到的来看,我们可以使用onPaste
事件来验证/阻止内容粘贴到<input>
字段中。同样地,如果我们想要验证/阻止按键,我们可以使用onkeydown
事件。我对ondrag
和ondrop
很好奇。
<input>
中的内容?如果我们想要获取整个更新后的输入,我们可以使用onchange
或onblur
事件。然而,我很好奇如何抓取只是拖动的文本-类似于我们如何使用event.which
抓取只是按下的键。
文本数据存储在event
某处的ondrag
或ondrop
-它是在一种格式,我们可以检索它吗?
我一直在探索Dottoro文档(拖放),没有运气
在更多的窥探之后,我在Dottoro上发现了一个JavaScript示例,它把我带进了兔子洞。
快速回答
文本可以抓取与 event.dataTransfer.getData("Text")
假设浏览器支持数据传输对象。还有其他限制-例如Webkit问题,getData
总是在dragstart
或dragover
(源)上为空。(小提琴)
event.dataTransfer.setData("Text", newText)
对拖动的文本进行修改。(小提琴) 在上面的两个示例中,"Text"是我们正在检索/修改的拖动内容的format
。MDN文档中列出了许多选项,但请注意,给定"拖动"的可用格式可以在events.dataTransferTypes
数组中找到。
详细信息和上下文
下面的代码解释了如何使用datattransfer对象和一些特性:
//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;
}
可以只绑定到ondrop
和ondragstart
事件,如下面的HTML:
<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>
注意: 如果你不覆盖ondragover
和ondragenter
事件,它们将像浏览器正常对待它们一样对待拖拽;这意味着您不能将文本放到非输入块(例如<div>
)上。
相关文章:
- html/javascript中的可拖动文本
- 当我单击画布并拖动鼠标时,光标将变为文本选择光标.我该如何防止这种情况发生
- Three.js中的文本覆盖会中断拖动
- 可拖动或可调整大小的文本区域不起作用
- 拖动时更改HTML5可拖动元素的“克隆”文本
- RaphaelJS中的文本元素不会在触摸设备上拖动
- 使网页上的文本可拖动
- 避免在拖动时跳转带有文本锚点的 SVG 文本
- 如何更改拖动'n在ExtJs中放置工具提示文本
- HTML 4拖动&将图片放到IE中的文本框中-结果将是文件名
- 我如何在具有“拖动”的文本上实现水平滚动功能;文本溢出:省略号;没有滚动条
- 停止用作图像拖动目标的文本区域
- 拖动到输入的链接并将其文本附加到其中
- 拖动文本可防止鼠标向上触发chrome
- 改变文本拖动根据一些条件- Extjs 4
- 删除文本拖动和选择
- 如何访问拖动的文本(或:如何将文本拖动到输入“工作”中?)
- 听选定的文本拖动事件在chrome扩展
- 当用户将文本拖动到文本字段时,如何触发JavaScript事件
- 将选定的文本拖动到输入中不会触发“DOMNodeRemoved"”