首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Textarea charCount -防止用户粘贴

Textarea charCount -防止用户粘贴
EN

Stack Overflow用户
提问于 2012-05-01 04:10:25
回答 3查看 2.2K关注 0票数 2

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

http://jsfiddle.net/qfzkw/2/

EN

回答 3

Stack Overflow用户

发布于 2012-05-01 05:10:46

如上所述,<textarea maxlength="10">将适用于少量情况-但不是所有

很难确定如何阻止用户(例如在firefox中)进入文本区,选择浏览器菜单Edit,然后单击Paste。我真的不知道如何防止这种情况发生。您可以检查keydown事件以防止ctrl + v。您可以禁用上下文菜单以禁止右击文本区域(尽管恶意用户可以编辑前端javascript,然后重新启用此功能)。

简而言之,没有通用的方法来防止用户以适当的方式粘贴。

然而,你可以破解一个解决方案(当你真正想要的东西看起来没有办法继续的时候,我总是最喜欢的)。我将要建议的这种方法取决于您运行的计时器的数量。如果你有多个计时器用于动画,谷歌建议你尝试将它们都合并到一个计时单元中,其他计时器都是从这个计时器派生出来的。如果是这种情况,请重构您的计时器。

实现全局计时器。实现一个基于该定时器每25ms运行一次的函数。缓存文本区域的内容。查看这些内容是否已更改。

文本区

代码语言:javascript
运行
复制
<textarea id="maintextarea"></textarea>

脚本

代码语言:javascript
运行
复制
/*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();
}

我认为虽然这实现了一个计时器,但这是一个非常实用的解决方案。它也能正常工作(经过测试)。

:)

票数 2
EN

Stack Overflow用户

发布于 2012-05-01 04:14:48

只需使用<textarea maxlength="10"></textarea>​

这不需要javascript。它还会自动处理复制粘贴。

这是更新后的jsFiddle

票数 1
EN

Stack Overflow用户

发布于 2012-05-01 04:15:51

你不能从浏览器窥视剪贴板缓冲区,所以你唯一的选择就是像现在一样限制在10个字符以内。使用maxlength="10“属性,而不是您正在进行的javascript字符计数。

代码语言:javascript
运行
复制
<textarea maxlength="10"></textarea>​
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10389939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档