我发现了你建议中的错误。以下是我的测试模式:
如果限制最大字符数为
05个字符。
测试值:123456,ABCDEF
1:使用键盘,正常输入文本
对于123456,6将被删除;
对于ABCDEF,F将被删除。
结果:OK
2:使用键盘,从其他地方复制并粘贴123456和ABCDEF
对于123456,粘贴(Ctrl V):“123456123456” => 456123456将被删除;
对于ABCDEF,粘贴(Ctrl V):“ABCDEFABCDEF” => DEFABCDEF将被删除。
结果:OK
3:使用鼠标,从其他地方复制并粘贴123456和ABCDEF
对于123456,粘贴(右键单击+粘贴):“123456123456” => 不会删除任何字符;
对于ABCDEF,粘贴(右键单击+粘贴):“ABCDEFABCDEF” => 不会删除任何字符。
结果:FALSE;
4:使用鼠标,从其他地方复制并粘贴123456和ABCDEF,然后输入其他内容
对于123456,粘贴(右键单击+粘贴):“123456123456” => 不会删除任何字符,使用键盘输入“123” => 所有文本都将被删除。
对于ABCDEF,粘贴(右键单击+粘贴):“ABCDEFABCDEF” => 不会删除任何字符,使用键盘输入“ABC” => 所有文本都将被删除。
结果:FALSE;
我在同一个函数中遇到了相同的错误。在我的函数中,这个模式对所有情况都是错误的。以下是我的代码:
jsfiddle 我在互联网上找到了这个函数,很抱歉我忘记了来源,如果你是所有者,请原谅我在此公开它。
HTML:
maxL = 2000;
var bName = navigator.appName;
function taLimit(taObj) {
if (taObj.value.length == maxL) return false;
return true;
}
function taCount(taObj, Cnt) {
objCnt = createObject(Cnt);
objVal = taObj.value;
if (objVal.length > maxL) objVal = objVal.substring(0, maxL);
if (objCnt) {
if (bName == "Netscape") {
objCnt.textContent = maxL - objVal.length;
} else {
objCnt.innerText = maxL - objVal.length;
}
}
return true;
}
function createObject(objId) {
if (document.getElementById) return document.getElementById(objId);
else if (document.layers) return eval("document." + objId);
else if (document.all) return eval("document.all." + objId);
else return eval("document." + objId);
}
You have <b><label id="myCounter">2000</label></b> characters left
<br/>
<textarea class="inputtextfield" onKeyPress="return taLimit(this)" onKeyUp="return taCount(this,'myCounter')" id="content" name="content" rows=7 wrap="physical" cols=40></textarea>
我很困惑如何修复我的错误。