是否可以拦截和修改粘贴到文本区域的文本?
如果无法拦截,粘贴后可以修改吗? (无需修改文本区域中已存在的文本。)
使用 jQuery:
jQuery(function($){
$('#your_element').bind('paste', function(event){
event.preventDefault();
var clipboardData = event.originalEvent.clipboardData.getData('text/plain');
console.log(clipboardData);
});
}
});
适用于 IE 和 Webkit。使用 Firefox,你可能必须使用这个:
http://intridea.com/2007/12/16/faking-onpaste-in-firefox?blog=company
也许拦截
keypress
es,了解何时按下 CTRL+C,缓存当前文本,然后在 CTRL+C 的 keyup
,使用简单文本检查当前值与缓存值处理你可以知道新的文本,并做你想做的事,并相应地更新。
我知道如何执行此操作的最佳方法是等待将内容粘贴到文本字段,然后等待 keyup 或 keydown 触发器。这如下面的代码所示:
<script language="javascript">
function testfunction()
{
// This function will execute whenever the content of
}
</script>
<textarea onkeyup="testfunction()" onkeydown="testfunction()"></textarea>
如果您想监视文本区域的任何更改,可以使用以下代码。它每 1/10 秒检查一次文本区域的值是否有任何更新。
<textarea id="testfield"></textarea>
<script language="javascript">
var textarea = document.getElementById('testfield');
var textval = '';
function monitor()
{
if(textval != textarea.value)
{
textval = textarea.value;
testfunction();
}
setTimeout('monitor()', 100);
}
function testfunction()
{
// This function will get executed whenever the value of the text area is altered (at most within 1/10th of a second)
}
monitor();
</script>
在这两种情况下,您都可以在 testfunction() 时修改文本区域的值,然后用更新后的值更新文本区域的值。
您可以使用
event.preventDefault();
阻止浏览器的默认粘贴。
然后读取剪贴板数据。
然后修改剪贴板数据并自行粘贴设置文本区域(或输入)值。
<textarea id="myTextarea" placeholder="Paste text here..."></textarea>
<script>
document.getElementById('myTextarea').addEventListener('paste', function (event)
{
// Prevent the default paste behavior
event.preventDefault();
// Get the clipboard data
const clipboardData = (event.clipboardData || window.clipboardData);
let pastedText = clipboardData.getData('text/plain');
// Modify the pasted text as needed
// Example: Convert to uppercase
pastedText = pastedText.toUpperCase();
// Insert the modified text into the textarea
let textarea = event.target;
let currentText = textarea.value;
let selectionStart = textarea.selectionStart;
let selectionEnd = textarea.selectionEnd;
const newText = currentText.slice(0, selectionStart) + pastedText + currentText.slice(selectionEnd);
textarea.value = newText;
});
</script>