Textarea charCount – 防止用户粘贴
下面的代码工作正常,但如果我粘贴一个超过10个字符的字符串,它应该只粘贴前10个字符。 目前它没有这样做,如何防止粘贴超过10个字符?
http://jsfiddle.net/qfzkw/2/
如上所述, 适用于少量案例 – 但不是全部 。
很难确定如何阻止用户(例如在firefox中)进入文本区域,选择浏览器菜单Edit
,然后单击Paste
。 我真的不知道如何防止这种情况。 您可以检查keydown事件以防止ctrl
+ v
。 您可以禁用上下文菜单以禁止右键单击文本区域(尽管恶意用户可以编辑前端javascript,然后重新启用此function)。
简而言之,没有通用的方法来防止用户以适当的方式粘贴。
但是,你可以破解一个解决方案(总是我最喜欢的,似乎没有办法继续你真正想要的东西)。 我要建议的这种方法取决于你运行了多少计时器。 如果您有多个动画计时器,谷歌建议您尝试将它们全部折叠成一个计时单元,其他计时单元来自。 如果是这种情况,请重构您的计时器。
实现全局计时器。 实现一个基于该计时器运行25ms的function。 缓存textarea的内容。 查看这些内容是否已更改。
textarea的
脚本
/*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(); }
我认为虽然这实现了计时器,但这是一个非常实用的解决方案。 它也恰好工作( 测试 )。
🙂
只需使用
没有javascript需要这个。 它还自动处理复制粘贴。
这是更新的jsFiddle 。
您无法从浏览器中查看剪贴板缓冲区,因此您唯一的选择是将其限制为10个字符,就像您目前所做的那样。 使用maxlength =“10”属性而不是你正在进行的javascript字符计数。