当右击选择区域外时,允许复制当前选择区域(相对于取消选择)
Allow copy current selection (vs. deselect) when right click outside the selection?
如何允许用户在选择区域外右击时复制当前选择区域?
下面是一个脚本,允许用户在HTML表中选择单元格。它将选定的单元格转换为tab分隔值,并将其放在屏幕外的文本区域,因此当用户在编辑菜单中单击"复制"或按Ctrl-C时,他们可以复制并粘贴选定的单元格到Google Docs或其他电子表格中。但是我发现很多用户都是通过右键单击并选择上下文菜单中的"复制"来复制粘贴的。但是,当他们选择表格并尝试这样做时,屏幕外文本区的当前选择被取消选中,并且"复制"不会出现在上下文菜单中-至少在最近的Firefox和Chrome中不会:
当用户右键单击时,是否有任何方法可以保持当前选择的选择,以便"复制"出现在本机上下文菜单中?
我发现了一个关于ie浏览器的相关问题,但在这种情况下,当用户右键单击时,即使是中的,当前选择也会被取消选中:在IE8中右键单击
上下文菜单由浏览器管理,它决定是否在其中添加复制(以及剪切和粘贴)命令。只有在用户选择打开上下文菜单时才会发生。
你可以为contextmenu
事件添加一个监听器,你可以取消它,因此你可以创建你的自定义上下文菜单——这很酷,但是如果没有一些花哨的技术(如Flash)的帮助,你将无法访问剪贴板。
你可以使用一个(肮脏的)技巧。但<textarea>
的把戏就是把戏。样式:
textarea {
position: absolute;
margin: 0;
padding: 0;
border: 0 none;
opacity: 0;
}
现在你可以为contextmenu
事件添加一个事件监听器:
var textarea = document.getElementsByTagName("TEXTAREA")[0];
document.addEventListener("contextmenu", function(e) {
textarea.style.zIndex = 10000; // must be high enough
textarea.style.left = e.pageX + "px";
textarea.style.top = e.pageY + "px";
textarea.setSelectionRange(0, textarea.value.length);
setTimeout(function() {
textarea.style.zIndex = -10000; // must be low enough
}, 10);
});
你在这里要做的是把文本区放在光标的正下方,并选择它的全部内容,这样光标就会在选定的区域上。
textarea必须在所有其他元素的顶部,所以你必须将它的z-index
样式属性设置为一个高值。但是你不会想要一个"鬼"浮动在你的页面上,这可能会阻止预期的鼠标行为,所以你马上把它推到所有其他元素的后面(因此setTimeout
)。
这样,你就有了一个上下文菜单上的工作副本。
我只在Chrome上测试过,抱歉。应该在其他浏览器上工作,我猜,你只需要测试。将不工作在IE8和更低(使用attachEvent
而不是addEventListener
,并有一个完全不同的方式来选择文本-检查出来),绝对不是在IE8(它总是阻止上下文菜单出现,如果你设置了contextmenu
事件监听器-必须使用mousedown
事件和检查右键)。
警告:根据用户单击的位置,文本区域可能会超出页面底部和右侧的边界,从而导致页面滚动条出现。你可以尝试调整文本区域的大小为1px宽和1px高,并设置overflow: hidden
。
嗯,这个答案对我自己也很有帮助。希望你会喜欢。
编辑: live test
- 当选择值x时,Javascript需要在正确的位置显示文本区域,从而循环通过具有选择选项的表单
- HTML-从mysql生成的选择框中的一个选项更改文本区域的颜色
- 大写--文本区域中的文本选择
- 如何使用JavaScript/jQuery选择图像的多边形区域
- JavaScript 在更改选择时不显示文本区域
- Javascript:Unicode符号选择器(用于将数学符号添加到文本区域)
- 缩小后的大图像上的Jcrop圆形选择显示预览选择区域中的全尺寸图像
- 如何在饼图(高图表)中选择区域
- JCrop:将文本添加到选择区域 - 可能
- 一个滚动条用于三个选项或选择区域
- 如何在钛应用程序中使图像选择区域更大
- 单击并拖动选择区域
- HTML图像地图,可选择区域触发弹出内容
- 使用jQuery为触摸事件选择区域
- 如何在选择区域时保存剑道UI编辑器中的光标位置
- 如何在谷歌地图上高亮下拉选择区域的区域
- JQuery克隆选择区域并将其全部传递给PHP数组
- 当右击选择区域外时,允许复制当前选择区域(相对于取消选择)
- 在javascript中选择区域/矩形
- 使用javascript在html页面上显示自定义选择区域