下面的代码工作正常,只是如果我粘贴一个超过 10 个字符的字符串,它应该只粘贴前 10 个字符。目前还没有这样做,如何防止粘贴超过 10 个字符?
http://jsfiddle.net/qfzkw/2/ http://jsfiddle.net/qfzkw/2/
就像声明的那样,<textarea maxlength="10">
适用于少量情况 - 但不适用于all.
很难确定如何阻止用户(例如在 Firefox 中)进入文本区域、选择浏览器菜单Edit
然后点击Paste
。我真的不知道如何防止这种情况发生。您可以检查 keydown 事件来防止ctrl
+ v
。您可以禁用上下文菜单以禁止右键单击文本区域(尽管恶意用户可以编辑前端 JavaScript,然后重新启用此功能)。
简而言之,没有通用的方法来阻止用户以正确的方式进行粘贴。
然而,你可以破解一个解决方案(当似乎无法继续你真正想要的事情时,这总是我最喜欢的)。我要建议的这种方法取决于您运行的计时器数量。如果您有多个动画计时器,谷歌建议您尝试将它们全部折叠到一个计时单元中,其他计时单元由其他计时单元派生。如果是这种情况,请重构您的计时器。
实现一个全局定时器。实现一个基于该计时器每 25 毫秒运行一次的函数。缓存文本区域的内容。看看这些内容是否发生了变化。
textarea
<textarea id="maintextarea"></textarea>
script
/*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();
}
我认为虽然这实现了一个计时器,但这是一个非常实用的解决方案。它也恰好有效(tested).
:)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)