文本区:显示错误数量的字符,我可以写
Textarea: Showing wrong qty of characthers that I can write
我在为文本区域设置限制字符时遇到了一个小问题。
我一直在努力展示我可以写的字符的限制,以及我可以继续写的字符键。
限制为10个字符,但当我按下第一个键时,输出会持续显示10个"空格"以继续写入。当我写最后一个字符时(理论上),输出显示可以再按一个,但这就像一个不可见的字符。
也许我已经忘记了如何做数学,但我很感激在这方面的任何帮助(如果代码还有其他问题,请告诉我)。
这是HTML部分:
<!DOCTYPE html>
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>JS Bin</title>
</head>
<body>
<textarea id='text'></textarea>
<br />
<span>Characters <span id='info'></span></span>
</body>
</html>
这就是JavaScript:
function showTill(limit){
var getId = document.getElementById('text');
var shot = getId.onkeydown = exe;
function exe(stuff){
var getSpan= document.getElementById('info');
var printSpan = getSpan.innerHTML = limit - getId.value.length; //prints qty of character keys I can write yet.
var evento = stuff || window.event;
var combine = evento.which || evento.keyCode;
var omitDel = combine === 8 || combine === 46; //Enabling Backspace and Delete after reaching the limit of character written.
var omitArrow = combine === 37 || combine === 39; //Enabling Right/Left Arrows after reaching the limit of character written.
if (getId.value.length >= limit && !omitDel && !omitArrow){
return false;
}else{
return true;
}
}
}
showTill(10);
谢谢!!
如果我了解发生了什么,解释是在事件处理中。
您正在捕获onkeydown
事件。所以,第一次按下某个键时,事件被触发,getId.value.length
显示0
,这是正确的。那时没有性格。稍后,当事件处理程序已经完成其工作时,将显示字符。所以在第一次按下char之后显示Character 10
。现在,再按一个,getId.value
返回1
:length 1,因为当时只有一个字符,第二个字符正在混合,但还没有。。。
按10个字符,但Character
字段显示1
。
onkeypress
也会有类似的行为
我们必须计算第一个"遗漏"字符。我会将事件处理功能更改为
function exe(stuff) {
var printSpan;
var getSpan = document.getElementById('info');
//var printSpan = getSpan.innerHTML = limit - (getId.value.length + 1); //prints qty of character keys I can write yet.
var evento = stuff || window.event;
var combine = evento.which || evento.keyCode;
var isDel = combine === 8 || combine === 46; //Enabling Backspace and Delete after reaching the limit of character written.
var isArrow = combine === 37 || combine === 39; //Enabling Right/Left Arrows after reaching the limit of character written.
if ((getId.value.length + 1) > limit && !isDel && !isArrow) {
return false;
} else {
if (isArrow) {
// do nothing
return true;
}
if (isDel)
printSpan = getSpan.innerHTML = limit - (getId.value.length - 1);
else
printSpan = getSpan.innerHTML = limit - (getId.value.length + 1);
return true;
}
}
相关文章:
- 我可以在json对象中添加一个函数吗
- AngularJS:我可以跳过函数参数回调吗
- 我可以获得相对于被点击元素的确切点击位置吗
- 我可以更改剑道UI网格吗's的外键值
- 我可以'我似乎不知道如何修复javascript中的两个lint.有人能帮我理解吗
- 我可以在Javascript/jQuery中使用一个变量作为键吗
- 在Angular中,我可以从模板url中截取内容吗
- 我可以使此幻灯片图像自动播放吗?
- 我可以通过JQuery将CSS类交换为一个特殊的元素集吗
- JavaScript-为什么我可以在数组中设置键
- 文本区:显示错误数量的字符,我可以写
- 我可以根据换行动态隐藏 html 字符吗?
- 为什么我可以't使用JQuery更新输入标签的值,并在其中放入€字符?我获得â¬字符串而不是欧
- 我可以显示普通字符而不是正则表达式吗?
- 我可以检测文本中的非日文中文字符吗?
- 我可以在javascript中删除所有ID命名相同的字符
- 我可以在Javascript中使用什么函数来从一种字符编码转换为另一种
- Rangy:我可以在恢复多个字符范围以突出显示时提高性能吗?
- 我可以在 JavaScript 中转义 HTML 特殊字符吗?
- 在javascript中,我可以覆盖括号来访问字符串中的字符吗