为什么单独的"paste"事件侦听器都粘贴到同一个<div>?



至少在最新版本的Chrome for Windows下,粘贴事件侦听器给我的结果不一致。

我正在尝试侦听来自屏幕上两个列分区的粘贴事件,并允许用户根据他/她上次单击的位置将文本粘贴到一列或另一列。 出于某种原因,粘贴的文本始终转到右侧列。

有人指出,我可以使用<input>而不是<p>,但是一旦用户粘贴文本,我希望我的脚本响应粘贴文本的点击单词,而 AFAIK<input>不允许这样做。

感谢任何经验,帮助或解决方法,谢谢。

现场演示

在 Windows 7 Pro 下使用 Chrome 版本 63.0.3239.132 进行测试,在 Ubuntu 下发布 Chromium。


更新,1/12/18:

根据@Grant(下图)的建议,我将内容插入到我的两个<div>中,Chrome 开始接受这两个的粘贴操作。 此外,没有响应窗口中任何地方的粘贴操作的Firefox现在也开始接受 将文本粘贴到两列。

同时,我在这里发布的示例仍然适用,我想知道为什么:这是"预期"行为,还是只是这些浏览器的粘贴事件的实现问题?


// Listen for "paste" events in each column:
//
document.getElementById("leftColumn").addEventListener("paste", leftPaste, false);
document.getElementById("rightColumn").addEventListener("paste", rightPaste, false);
// todo: for some reason leftPaste() is not triggered:
//
function leftPaste(e) {
var clipboardData, pastedData;
clipboardData = e.clipboardData;
pastedData = clipboardData.getData('Text');
alert(pastedData);
document.getElementById('leftPara').textContent = pastedData;
}
function rightPaste(e) {
var clipboardData, pastedData;
clipboardData = e.clipboardData;
pastedData = clipboardData.getData('Text');
alert(pastedData);
document.getElementById('rightPara').textContent = pastedData;
}
body {
color : #334455;
background-color: #aabbcc;
font-family: 'PT Sans', sans-serif;
font-size : 14px;
cursor : default;
}
.frame {
border: 1px solid rgb(31, 40, 49);
background-color : #283849;
color : #aabbcc;
overflow: auto;
position: relative;
}
.myColumn {
height: 90vh;
overflow: auto; /*causes scrollbars*/
float: left;
width: 45%;
margin-left: 4%;
}
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>Text pasted to left column goes to right column</title>
</head>
<body>
<h3>With Google Chrome, Version 63.0.3239.132 (Official Build) (64-bit) under
Windows Pro 7 64 bit,
clicking and pasting in either column pastes to the right column.
</h3>

<div id=leftColumn class="myColumn frame">
<p id=leftPara style="word-wrap: break-word; white-space: pre-wrap;" class=clickable></p>
</div>
<div id=rightColumn class="myColumn frame">
<p id=rightPara style="word-wrap: break-word; white-space: pre-wrap;" class=clickable></p>
</div>
</body>

我无法明确地告诉你为什么这种行为是这样的 - 也许更聪明的人可以,但我之前遇到过这样的情况,div 需要实际包含内容才能使该div 可聚焦。这是一支演示所需结果的笔:https://codepen.io/anon/pen/QaQBPV。- 文本"左"和"右"使其可单独聚焦。

<div id=rightColumn class="myColumn frame">
Right <!-- this bit -->
<p id=rightPara style="word-wrap: break-word; white-space: pre-wrap;" class=clickable></p>
</div>

包装div 时在父div 上触发的事件是由于称为事件冒泡的东西,您已将其设置为 true,我在笔中将其更改为 false(事件侦听器中的最后一个参数) - 有关更多信息,请参阅 http://alistapart.com/article/domtricks2。

相关内容

最新更新