17

我不能preventDefault()去上班。

以下是我尝试过的一些不同的代码变体:

第一的:

$(document).keyup(function (evt) {
    var charCode = (evt.which) ? evt.which : event.keyCode;
    if (charCode == 192) {
        alert('192');
        return false;
    }
});

第二:

$(document).keyup(function (evt) {
    var charCode = (evt.which) ? evt.which : event.keyCode;
    if (charCode == 192) {
        alert('192');
        evt.preventDefault();
    }
});

第三:

$(document).keyup(function (evt) {
    var charCode = (evt.which) ? evt.which : event.keyCode;
    if (charCode == 192) {
        alert('192');
        evt.preventDefault();
        return false;
    }
});

只有警报有效。
一切都可以在 Opera 上运行,但不能在 Chrome 和 IE 上keydown运行keypress。在keypress脚本上不起作用。 $('#thetext').keydown(function(evt){});两者都不起作用。
这是整个代码:http ://bbullett.tk/test/kakey.html

Key 192 = `

我正在尝试插入一些文本或符号而不是`

4

4 回答 4

49

监听keyup事件来不及调用preventDefault,尝试监听keypresskeydown代替。

$('input[type=text], textarea').on('keydown', function(event){
    if (event.which == 192) {
        console.log('192');
        event.preventDefault();
    }
});

请注意,jQuery 规范化which属性并且它是跨浏览器的。

http://jsfiddle.net/763ys/

于 2012-12-27T13:03:07.367 回答
7

.keyup();没有默认行为 它在触发默认行为的按键后触发。请改用.keydown() or.keypress()`。

来源: http ://api.jquery.com/category/events/keyboard-events/

于 2012-12-27T13:03:49.597 回答
2

您正在使用 JQuery,它规范了浏览器之间的差异,因此您只需要检查 evt.which 属性。请参阅 JQuery 文档:http ://api.jquery.com/keyup/

正如其他人所说 - keyup 为时已晚,无法停止密钥的处理。请改用 keydown 或 keypress 。http://api.jquery.com/category/events/keyboard-events/

于 2012-12-27T13:04:47.993 回答
0

在这里查看工作示例http://jsfiddle.net/WGSvm/

在您使用的所有三个示例中

$(document).keyup(function (evt) {  });

我会说使用特定的 div id 而不是$(document).keyup(function (evt) { });

喜欢$("#DivIdName").keyup(function (evt) { }); 并且也onkeypress 严格使用,因为如果你使用onkeyup 它,它已经执行了它的默认打印任务或其他任何任务。

于 2012-12-27T13:04:21.393 回答