javascript - 可粘贴 div : paste disappear in context-menu, 只能通过 ctrl+V 工作

标签 javascript html browser contextmenu copy-paste

我有 HTML div,我通过以下方式将其设置为可粘贴区域:

$('#' + pasteZoneId).bind("paste", (e)=> {

当用户按 ctrl+v 时,一切正常,事件被触发。 问题是,当用户右键单击上下文菜单进行粘贴时,粘贴选项会在上下文菜单中消失。

我应该做什么?


更新:

更多细节:我并不是说用户可以在 div 中粘贴内容,例如文本等。div 并不是真正可粘贴的;我捕获粘贴事件,然后有 y 逻辑,并只粘贴图像。 获取图像,通过Jquery将其附加到div;不是浏览器。

现在的问题只是如何使上下文菜单显示“粘贴”选项,因为当用户按 ctrl+V 时效果很好,事件被触发并且图像由我的代码附加,所以我只想让用户单击粘贴而不是粘贴。

最佳答案

虽然每个元素都可以接收粘贴事件,但该事件将始终被忽略(没有默认行为),除非该元素是 <input> ,一个<textarea> ,或在contentEditable模式下。

因此,虽然没有关于浏览器应在上下文菜单中显示什么内容的规范,但事实上,大多数浏览器都不会显示“粘贴”,无论如何它都会被忽略。

所以要把它放在你的 <div> 上,你必须有它的 contentEditable属性设置为 true。

如果您不总是想要它,您可以在 mousedown 事件中修改一些内容:

target.onmousedown = e => {
  if (e.button === 2) target.contentEditable = true;
  // wait just enough for 'contextmenu' to fire
  setTimeout(() => target.contentEditable = false, 20);
};

target.onpaste = e => {
  e.preventDefault();
  console.log('got paste data:', e.clipboardData.getData('text'));
};
<div id="target">right click me</div>

关于javascript - 可粘贴 div : paste disappear in context-menu, 只能通过 ctrl+V 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52695725/

相关文章:

java - 如何从可以进行 html 校正和 js 脚本编写的浏览器获取 html 内容?

javascript - 设置 div 类以匹配其文本

javascript - Node.JS 上的服务器发送事件

javascript - 用户突出显示输入字段并且未输入任何内容后,Angular JS 会显示错误

html - 使用CSS垂直居中按钮

jquery - CSS3 幻灯片错误

google-chrome - 适用于 document.domain 的 Chrome 解决方案

javascript - ExtJs4 如何在循环中创建动态函数

php - 是否可以使用 html/php 限定提交范围?

html5 - 如何检查在 Canvas 上绘制的形状?