我有多个输入,我附加事件监听器,监听按下了什么键,用正则表达式测试它,如果是数字则返回true,如果是其他字符则返回false。问题是即使我的测试函数返回false,输入也会接受字母。
$$(".number").each(function (element) {
return $(element).observe("keypress", function (event) {
return /[\d\s]/.test(String.fromCharCode(event.keyCode));
});
});
JS Bin上的示例。
答案 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);
}
});
});
答案 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);
}
});
});