Javascript Textarea charCount-防止用户粘贴
下面的代码工作正常,只是如果我粘贴了一个超过10个字符的字符串,它应该只粘贴前10个字符。目前它不这样做,如何防止粘贴超过10个字符 只需使用Javascript Textarea charCount-防止用户粘贴,javascript,jquery,html,Javascript,Jquery,Html,下面的代码工作正常,只是如果我粘贴了一个超过10个字符的字符串,它应该只粘贴前10个字符。目前它不这样做,如何防止粘贴超过10个字符 只需使用 这不需要javascript。它还自动处理复制粘贴 这是更新后的。您无法从浏览器查看剪贴板缓冲区,因此您唯一的选择是将其限制为10个字符,就像您当前所做的那样。使用maxlength=“10”属性,而不是javascript字符计数 <textarea maxlength="10"></textarea> 如上所述,将
代码>
这不需要javascript。它还自动处理复制粘贴
这是更新后的。您无法从浏览器查看剪贴板缓冲区,因此您唯一的选择是将其限制为10个字符,就像您当前所做的那样。使用maxlength=“10”属性,而不是javascript字符计数
<textarea maxlength="10"></textarea>
如上所述,
将适用于少量情况,但并非所有情况
很难确定如何阻止用户(例如在firefox中)进入文本区域,选择浏览器菜单Edit
,然后单击Paste
。我真的不知道如何防止这种情况。您可以检查按键事件以防止ctrl
+v
。您可以禁用上下文菜单以禁止右键单击文本区域(尽管恶意用户可以编辑前端javascript,然后重新启用此功能)
简而言之,没有通用的方法来阻止用户以适当的方式粘贴
然而,你可以破解一个解决方案(当你似乎没有办法继续做你真正想要的事情时,这一直是我的最爱)。我将要建议的这种方法取决于您运行的计时器的数量。如果你有多个动画计时器,谷歌建议你试着把它们都折叠成一个计时单元,其他的都是从中派生出来的。如果是这种情况,请重构您的计时器
实现一个全局计时器。实现一个基于该计时器运行25毫秒的功能。缓存textarea的内容。看看那些内容是否有变化
文本区
<textarea id="maintextarea"></textarea>
我认为虽然这实现了一个计时器,但这是一个非常实用的解决方案。它也碰巧起作用(经过测试)
:)这就是我想说的,我知道你不能窥视世界clipboard@AbuHamzah啊,好的,那么maxlength属性应该适合你。这不是跨浏览器兼容的。好吧,我想是的。每天学习新的东西。试试这个吧?为什么没有提到任何理由就投了反对票?即使对某些人来说这是一个微不足道的问题,但它确实遵守了stackoverflow的规则。。谁关心你测试它?我确实尝试了maxlength,但我仍然可以粘贴更多的字符。。。我测试了您修改的JSFIDLE,但仍然是same@AbuHamzah是的,即使粘贴长度大于10的字符,上述JSFIDLE也可以正常工作。我刚检查过。试试这个,复制超过10个字符的文本,然后paste@AbuHamzah您使用的浏览器和版本是什么?在firefox中,这不会阻止粘贴超过10个字符。在chrome中,它可以工作。
/*init*/
var globalTimer = new Date();
var cachedText = document.getElementById("maintextarea").value;
var iterationCount = 0;
function cacheText() {
cachedText = document.getElementById("maintextarea").value;
}
function upDateTimer() {
globalTimer = new Date();
var timerTimeout = setTimeout('upDateTimer()', 5);
timeBasedOperations();
}
upDateTimer();
function timeBasedOperations() {
iterationCount++;//this will allow timing to occur
//TODO: Add in other timers calls based on global timer
if (iterationCount % 5) {//every fifth iteration (hence 25ms)
checkTextArea();
}
}
function checkTextArea() {
var currentText = document.getElementById("maintextarea").value;
var textArea = document.getElementById("maintextarea");
if (currentText.length > cachedText.length) {
//TODO: Add additional logic for catching a paste or text change
textArea.value = currentText.substr(0, 10);
}
cacheText();
}