0

这是我的 JS

function validate(evt) {
  var theEvent = evt || window.event;
  var key = theEvent.keyCode || theEvent.which;
  key = String.fromCharCode( key );
  var regex = /[0-9]/;
  if( !regex.test(key) ) {
    theEvent.returnValue = false;
    if(theEvent.preventDefault) theEvent.preventDefault();
  }
}

该脚本仅适用于input标签,只能输入数字。

它在谷歌浏览器上运行良好,但在 Firefox 15.0 退格、删除、箭头键不起作用

这是Firefox的错误,还是我的脚本有问题?

4

2 回答 2

2

原因是 Chrome 和 IE 不会触发这些特殊键(退格、删除、箭头键)的按键事件。

但是对于 Firefox,该事件将被触发,并且匹配正则表达式失败,因此theEvent.preventDefault()将被执行。

于 2012-09-06T04:56:35.780 回答
1

正如 xdazz 所说:

var key = theEvent.keyCode || theEvent.which;

key是按键的 ASCII 码。退格是 8,删除是 46。

var key = theEvent.keyCode || theEvent.which;

现在该代码已转换为字符。退格键和删除键不映射到数字,因此正则表达式会导致默认操作被阻止。

该策略是有缺陷的,因为在将字段提交到服务器之前,您不关心字段的值是什么,因此在用户离开字段和提交表单时验证内容(并且总是再次在服务器上) .

用户可以通过除按键以外的多种方式将数据放入表单字段,因此使用字段的值(而不是按下的键)进行验证。它更简单,更不容易出错。

于 2012-09-06T05:08:45.990 回答