Javascript 为什么我会得到重复的文本,并带有;粘贴";textarea上的事件?
Javascript 为什么我会得到重复的文本,并带有;粘贴";textarea上的事件?,javascript,html,Javascript,Html,var txarea=document.getElementById('source'); txarea.addEventListener('paste',function(){ 设text=txarea.value; console.log(文本); 让replace\u text=text.replace(/\n/g,“”) console.log(替换_文本); txarea.value=替换_文本; }); 让我们分析一下测试用例及其与代码的交互方式 用户选择文本区域中的所有文本 用户发
var txarea=document.getElementById('source');
txarea.addEventListener('paste',function(){
设text=txarea.value;
console.log(文本);
让replace\u text=text.replace(/\n/g,“”)
console.log(替换_文本);
txarea.value=替换_文本;
});
让我们分析一下测试用例及其与代码的交互方式
我认为你想做的是:
您可以使用找到正在粘贴的文本,即: 但是,您不希望仅用粘贴的信息替换textarea的内容,也不希望在末尾附加它。如果用户把插入符号放在文本的中间,然后点击CTRL+V?怎么办? 进入
var txarea=document.getElementById('source');
txarea.addEventListener('paste',函数(e){
e、 预防默认值();
让text='';
if(e.clipboardData | | e.originalEvent.clipboardData){
text=(e.originalEvent | | e).clipboardData.getData('text/plain');
}else if(window.clipboardData){
text=window.clipboardData.getData('text');
}
console.log(文本);
让replace_text=text.replace(/\n/g');
console.log(替换_文本);
if(document.queryCommandSupported('insertText')){
document.execCommand('insertText',false,replace_text);
}否则{
document.execCommand('paste',false,replace_text);
}
});代码>
让我们分析一下测试用例及其与代码的交互方式
用户选择文本区域中的所有文本
用户发起“粘贴”
在粘贴发生之前,将触发回调
您的回调将文本区域的内容替换为新的修改内容。(将换行符替换为空格。)
由于您已将textarea的内容全部替换为新内容,因此用户的初始文本选择不再有效因此,有效光标位置现在位于新替换内容的末尾。
粘贴时,会将新文本添加到textarea内容的末尾
在步骤#5中,如果文本未被修改(即没有换行符开始),则选择仍然有效,粘贴将作为替换而不是附加
我认为你想做的是:
检测到用户正试图粘贴某些文本
在粘贴文本之前对其进行修改。(通过将换行符替换为空格。)
您可以使用找到正在粘贴的文本,即:
但是,您不希望仅用粘贴的信息替换textarea的内容,也不希望在末尾附加它。如果用户把插入符号放在文本的中间,然后点击CTRL+V?怎么办?
进入
var txarea=document.getElementById('source');
txarea.addEventListener('paste',函数(e){
e、 预防默认值();
让text='';
if(e.clipboardData | | e.originalEvent.clipboardData){
text=(e.originalEvent | | e).clipboardData.getData('text/plain');
}else if(window.clipboardData){
text=window.clipboardData.getData('text');
}
console.log(文本);
让replace_text=text.replace(/\n/g');
console.log(替换_文本);
if(document.queryCommandSupported('insertText')){
document.execCommand('insertText',false,replace_text);
}否则{
document.execCommand('paste',false,replace_text);
}
});代码>
复制粘贴只有一行时也会发生同样的情况,例如,abc
@user2342558 Hmm。只要没有换行符,我就不会得到一行文本的重复文本。例如,abc
和abc de
对我来说很好。我使用的是Chrome Ubuntu v77。同样的情况也发生在只复制粘贴一行,例如,abc
@user2342558-Hmm。只要没有换行符,我不会用一行文本获得重复文本。例如,abc
和abc de
对我来说很好。我正在使用Chrome Ubuntu v77。是的。我刚刚发现在粘贴执行之前我正在更改文本。但是为什么在没有换行符的情况下,没有出现意外的文本,例如,abc def
。在粘贴新文本之前,代码基本上删除了所有现有文本中的换行符,然后在函数退出后允许粘贴新文本(未修改)。@Rick注意e.preventDefault()代码>在我的函数顶部。我想这可能会帮助你理解对你来说没有意义的部分。对不起@Woodrow Barlow。昨天我太累了,没法回答。。今天我仔细阅读了你的答案,发现这一点很重要,“在第5步,如果文本没有修改(即没有换行符),那么选择仍然有效,粘贴作为替换而不是附加。”这解释了如果内容没有更改,文本不会附加的原因。你去哪儿了
let paste = (event.clipboardData || window.clipboardData).getData('text');