在jQuery中取消一个按键输入

6

用户在文本框中输入内容后,是否有可能(跨浏览器兼容)取消用户已经输入的键盘按键呢?

目前我的代码是在显示按键后编辑文本框的值:

$('.number').keypress(function() {
    this.value = this.value.replace(/[^0-9\.]/g, '');
});
2个回答

4
$('.number').keypress(function() {
    if ( this.value == 'foobar' ){
        // "Cancel" keystroke
        return false;
    }
    this.value = this.value.replace(/[^0-9\.]/g, '');
});

这样做不起作用。您需要使用正则表达式测试this.value中的被禁止的值。您正在对整个this.value进行精确匹配测试。 - user113716
实际上,如果if()语句返回truereplace()就不会触发。因为你正在针对this.value进行测试,这是一个至关重要的部分。 - user113716

4

已解决(并更新)

抱歉,我没有测试最明显的选项 - 但它起作用了:

$('.number').keypress(function(event) {
    return /[0-9\.]/.test(String.fromCharCode(event.keyCode));
});

1
如果您不想短暂地看到被禁止的条目,那么以下是正确的做法。您可以使用test()函数来简化代码,像这样:/[^0-9\.]/.test(String.fromCharCode(event.keyCode))。由于已经使用了 return false;,所以无需进行替换或赋值操作。由于只测试单个按键事件,因此也不需要使用全局标识符 g - user113716
谢谢,我已经采纳了您的建议并进行了更新,只有一个小改动 - 从正则表达式中删除插入符号(^),因为那会反转测试结果 :) 非常感谢! - Jimbo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接