Javascript字符限制-暂时显示无效字符
Javascript character restriction - invalid characters show up temporarily
我使用Javascript来限制各种文本输入字段的字符,作为客户端验证的一种形式,并提高可用性。我使用以下代码来执行此操作:
function validNumbers(caller) {
var exp = /^['d.]+/g;
var str = '';
if (caller.value.match(exp)) {
str = caller.value.match(exp).toString();
} else {
str = '';
}
str = str.replace(/'D/g,'');
caller.value = str;
}
我用onkeypress="validNumbers(this);"调用这个函数,并且,在大多数情况下,它工作得很好。问题是,当我在字段中键入无效字符时,字段的值似乎得到了更新(从Javascript的角度来看),但该字符一直保留到我按下一个键,此时它在视觉上被下一个键的值所取代,即使下一个键也是无效的。期望的效果是,当按下无效键时,无效值甚至不会在视觉上显示出来。我该如何做到这一点?
编辑:我选择下面的答案是因为它让我走上了正确的轨道。我确实必须确保将e.shiftKey添加到排除事件列表中,以防止像"!@#$%^&*()_+"这样的字符,但这不是我自己发现的问题。在您的函数中,您正在清除已输入文本字段并评估的值。相反,您需要完全防止将其输入到文本字段中。要做到这一点,您需要使用keydown的preventDefault()
方法:
onkeydown="function(e) { validNumbers(e); }"
function validNumbers(e) {
if (e.keyCode == 1 || e.keyCode == 2 ... etc) {
e.preventDefault();
}
}
这将阻止特定字符(此处引用)进入输入字段。注意,这不会阻止复制和粘贴,所以你要么仍然需要计算整个字符串'onpaste',要么用类似的事件处理程序阻止'onpaste'。
这也不是一个跨浏览器的解决方案,但应该让你的脚足够湿。
相关文章:
- 根据页面的位置突出显示文本中的字符
- 单元格的工具提示或标题不显示超过2000个字符
- 附加“;显示更多“;仅当满足设定的字符数时,链接到截断的段落
- 如何显示字符串中最多 200 个字符
- 如何不显示/过滤特殊字符?(CSS或Javascript)
- 如何使用javascript在输入元素中显示特殊字符
- 尊重“; 〃;从HTML显示中的API响应返回的换行符(和特殊字符)
- 在粘贴到文本字段Jquery时检查并突出显示不支持的特殊字符
- HTML 标签以 ASCII 字符显示
- Â字符显示在html中的每个$字符之前
- JavaScript-如何逐个字符显示文本
- 使用javascript让文本按字符显示
- â -字符显示代替em破折号(-)
- 如何用特殊字符显示来自资源的消息
- 为什么非ascii字符显示为奇怪的符号
- 高字符显示错误的月份在日期图表
- JavaScript/PHP页面字符显示错误
- 如何避免在文本框中键入的特定字符显示使用JQuery/Javascript
- 特殊字符显示在Python Dict构建的表单AWS中,并通过django视图传递给js
- 表单上的编码问题;一些特殊字符显示为 ASCII 代码