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

2023-12-19

从我到目前为止所看到的来看,我们可以使用onPaste验证/阻止内容的事件pasted进入一个<input>场地。同样,如果我们想验证/阻止按键,我们可以使用onkeydown事件。我很好奇ondrag and ondrop.

具体来说,我们如何检索用户的内容drags变成文字<input>?如果我们想获取整个更新的输入,我们可以使用onchange or onblur事件。不过我很好奇抢just拖动的文本——类似于我们如何使用event.which抓住just按下的键。

文本数据是否存储在event某处为ondrag or ondrop——它的格式是我们可以检索的吗?

我一直在探索 Dottoro 文档(drag http://help.dottoro.com/ljmojcxu.php/drop http://help.dottoro.com/ljbflwps.php)没有运气。


经过更多的窥探,我发现了一个 JavaScript 示例Dottoro http://help.dottoro.com/ljbflwps.php这让我掉进了兔子洞。

快速回答

文字可以是grabbed with event.dataTransfer.getData("Text") assuming浏览器支持 dataTransfer 对象。还有其他限制——例如 Webkit 问题getData始终为空dragstart or dragover (source https://stackoverflow.com/questions/9534677/html5-drag-and-drop-getdata-only-works-on-drop-event-in-chrome). (Fiddle http://jsfiddle.net/74u8X/4/)

同样,拖动的文本可以是modified通过使用event.dataTransfer.setData("Text", newText). (Fiddle http://jsfiddle.net/3ABF9/1/)

在上面的两个示例中,“Text”是format我们正在检索/修改的拖动内容。里面列出了很多选项MDN 文档 https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer,但请注意,给定“拖动”的可用格式可以在events.dataTransferTypes array.


细节和背景

以下代码解释了如何使用 dataTransfer 对象以及一些特性:

//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 and 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>

Caution: 如果你不覆盖ondragover and ondragenter事件,它们将像浏览器通常对待它们一样对待拖动;这意味着您不能将文本拖放到非输入块(例如<div>).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • glGenerateMipmap 需要哪个内存屏障?

    我已使用 GL ARB shader image load store 写入纹理的第一个 mipmap 级别 文档指出 在其他操作中使用该图像的内容之前 我需要调用 glMemoryBarrier 以便适当地刷新缓存 例如 在执行 glTe
  • MPNowPlayingInfoCenter 与 Apple Music 冲突

    我正在开发一个在后台播放音乐的音乐播放器 该应用程序与 Spotify 和 Apple Music 集成 用户将仅在其中一项服务中进行身份验证 目前 我可以使用这两种服务在应用程序和后台播放音乐 我也能够设置MPNowPlayingInfo
  • MySql 查询:从表中为每个类别选择前 3 行

    我有一个包含记录的表 它有一行名为category 我插入了太多文章 我只想从每个类别中选择两篇文章 我尝试做这样的事情 我创建了一个视图 CREATE VIEW limitrows AS SELECT FROM tbl artikujt
  • 为什么在 PHP 中对日期格式为“YYYY-MM-DD”的两个字符串进行小于或大于比较会起作用,即使它们是字符串?

    我正在为一个项目编写一段 PHP 代码 该项目将 YYYY MM DD 格式的日期与当前日期进行比较 以查看它是否小于当前日期 在代码的不同点 使用了两种不同的方法进行比较 第一个使用的get timestamp 日期并根据时间戳进行比较
  • 在 MATLAB 中使用转置与 ctranspose

    在 MATLAB 中转置向量 矩阵时 我只看到并使用了 撇号 运算符很长一段时间 例如 gt gt v 1 2 3 v 1 2 3 然而这是共轭转置正如我最近发现的那样 或者ctranspose 这似乎只在涉及复数时才重要 如果你想转置矩阵
  • 旋转时调整 UINavigationBar 的大小

    我有一个 UIViewController 的子类 它处理 UIView 视图控制器以模态方式呈现 它从屏幕底部向上滑动 在视图的顶部 我添加了一个导航栏 请注意 该栏不是由导航控制器处理的 我想让导航栏在视图旋转到横向时缩小高度 类似于
  • 如何更改 iOS7 中 UISearchBar 的取消按钮色调颜色

    我想将 Textfield 的色调颜色更改为蓝色 并将 UISearchBar 的取消按钮色调颜色更改为白色 我正在使用下面的代码 for UIView subView in searchBar subviews for UIView nd
  • Python 列表与数组——何时使用?

    如果要创建一维数组 可以将其实现为列表 或者使用标准库中的 array 模块 我一直对一维数组使用列表 我想改用数组模块的原因或情况是什么 是为了性能和内存优化 还是我错过了一些明显的东西 基本上 Python 列表非常灵活 可以保存完全异
  • Python 日志记录不会关闭

    我一直在学习 python 日志记录模块 但在完成后关闭日志记录时遇到问题 这是一个例子 import logging log logging getLogger log setLevel logging INFO handler logg
  • emacs 更改默认行结尾

    在 Windows 中 Emacs 使用 cr lf 进行换行 但我喜欢所有文件都使用 Unix 行结尾 lf 我找到了一种在会话期间更改它的方法 但我不是 Emacs 专家 无法将解决方案转换为 emacs 文件中的 elisp 命令 有
  • 如何在Google Sheet App脚本中使用JS库?

    我想在 Google Sheet 中编写一个自定义函数来生成条形码 如何导入外部 js 库 例如https lindell me JsBarcode https lindell me JsBarcode 这就是我到目前为止所做的 funct
  • PHP cli 脚本不输出任何内容

    所以我有一个 php 脚本 我使用以下命令执行 php f my script php myArguments 该脚本使用 svn 进行版本控制 我刚刚更新了它 将运行它的命令粘贴到终端中 然后执行它 但是 没有任何输出 不是失败消息 不是
  • 如何在也具有导航的 Tabbar 应用程序中调用 viewWillDisappear 方法

    我在我的应用程序中创建了 5 个选项卡 在Tab1 i have UITableView On didSelectRowAtIndexPath我正在导航到另一个 UIView 其中显示了我的所有 5 个选项卡 我还在那个导航视图中播放歌曲
  • Delphi XE5可以编译一个可以用“System.loadLibrary”在Java中加载的.so库吗?

    我之前已经使用 Free Pascal FPC 编译器成功编译了一个用 Pascal 编写的 so 库 该库通过 System loadLibrary 在 Android Java 中成功加载 并且可以通过 Android Java 代码中
  • 从rc6升级到Rails 3.1.0,资产预编译失败

    从 Rails 3 1 0 rc6 升级到 Rails 3 1 0 后 运行时收到一些错误消息assets precompile像这样的任务 RAILS ENV production RAILS GROUPS assets rake ass
  • 如何在 PHP 中创建持久会话?

    I used session start 在 PHP 中启动会话 但是当我的浏览器关闭时 会话就消失了 如何使用 PHP 创建跨浏览器关闭的持续会话 See the php ini value session cookie lifetime
  • 如何设计具有修订历史的数据库?

    我是构建新的团队的一员内容管理系统对于我们的公共网站 我正在尝试找到最简单和最好的方法来构建版本控制机制 对象模型非常基本 我们有一个摘要BaseArticle包含版本无关 元数据属性的类 例如Heading CreatedBy 许多类都继
  • 无法启动事件网关实例:事件网关服务未启用

    我最近将服务器从 ColdFusion 7 Enterprise 迁移到 ColdFusion 10 Standard 现在我们的事件网关无法正常工作 当我尝试启动它们时 它说 无法启动事件网关实例 事件网关服务未启动 已启用 我确实在 网
  • 允许在 IIS7 中下载 MDB

    目前 如果我托管 Access MDB 文件以允许用户下载 IIS7 会抛出 404 错误 我知道该文件在那里并且权限很好 这似乎是处理程序问题 但我不知道如何更改处理程序以允许下载 MDB 文件 我认为我需要向 web config 的
  • 如何访问拖动的文本(或者:将文本拖动到输入中如何“工作”?)

    从我到目前为止所看到的来看 我们可以使用onPaste验证 阻止内容的事件pasted进入一个