原型。限制输入数字

时间:2014-12-12 12:26:55

标签: javascript prototypejs

我有多个输入,我附加事件监听器,监听按下了什么键,用正则表达式测试它,如果是数字则返回true,如果是其他字符则返回false。问题是即使我的测试函数返回false,输入也会接受字母。

$$(".number").each(function (element) {
  return $(element).observe("keypress", function (event) {
    return /[\d\s]/.test(String.fromCharCode(event.keyCode));
  });
});

JS Bin上的示例。

2 个答案:

答案 0 :(得分:1)

您正在使用prototypeJS,据我所知,它不允许使用return false来取消事件传播和默认行为(正如jQuery所做的那样)。虽然它有Event.stop(event)方法

$$(".number").each(function (element) {
    return $(element).observe("keypress", function (event) {
        var result = /[\d\s]/.test(String.fromCharCode(event.keyCode));

        if (!result) {
            Event.stop(event);
        }
    });
});

Event.stop(event)

答案 1 :(得分:0)

你可以通过测试keyup上的值,然后删除输入的内容(如果它与你想要的模式不匹配)来做到这一点:

$$(".number").each(function (element) {
  return $(element).observe("keyup", function (event) {
    var val = this.value

    if(!/[\d\s]/.test(String.fromCharCode(event.keyCode))){
      this.value = val.substring(0, val.length - 1);
    }
  });
});