Javascript Textarea charCount-防止用户粘贴

Javascript Textarea charCount-防止用户粘贴,javascript,jquery,html,Javascript,Jquery,Html,下面的代码工作正常,只是如果我粘贴了一个超过10个字符的字符串,它应该只粘贴前10个字符。目前它不这样做,如何防止粘贴超过10个字符 只需使用 ​ 这不需要javascript。它还自动处理复制粘贴 这是更新后的。您无法从浏览器查看剪贴板缓冲区,因此您唯一的选择是将其限制为10个字符,就像您当前所做的那样。使用maxlength=“10”属性,而不是javascript字符计数 <textarea maxlength="10"></textarea>​ ​ 如上所述,将

下面的代码工作正常,只是如果我粘贴了一个超过10个字符的字符串,它应该只粘贴前10个字符。目前它不这样做,如何防止粘贴超过10个字符

只需使用

这不需要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();
}