关键字事件的preventDefault()无法正常工作

时间:2012-12-27 12:55:51

标签: javascript jquery google-chrome internet-explorer-8

我无法让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 还尝试了keydownkeypress。 在keypress脚本不起作用。 $('#thetext').keydown(function(evt){});无法正常运作。
以下是完整代码:http://bbullett.tk/test/kakey.html

Key 192 = `

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

4 个答案:

答案 0 :(得分:33)

聆听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/

答案 1 :(得分:5)

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

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

答案 2 :(得分:2)

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

正如其他人所说的那样 - 关键时刻已经来不及停止处理密钥了。请改用keydown或keypress。 http://api.jquery.com/category/events/keyboard-events/

答案 3 :(得分:0)

请参阅此处的工作示例http://jsfiddle.net/WGSvm/

在所有三个例子中,您都使用了

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

我想说使用特定的div id代替$(document).keyup(function (evt) { });

$("#DivIdName").keyup(function (evt) { }); 并使用onkeypress 严格来说,因为如果你使用onkeyup 它已经执行了默认的打印任务或者它是什么。