【问题标题】:preventDefault() on keyup event not working按键事件上的 preventDefault() 不起作用
【发布时间】:2012-12-27 12:55:50
【问题描述】:

我无法让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 = `

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

【问题讨论】:

  • 请缩进您的代码以使其可读。谢谢! 192 是哪个键?按下此键时的默认行为是什么?
  • 你想做什么?停止 keyup 事件会完成什么?
  • 我正在尝试插入一些符号而不是 `
  • 您需要捕获keydown 事件。当keyup 被触发时,字符已经被写入

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


【解决方案1】:

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

【讨论】:

  • 手动检查event.e.isDefaultPrevented() 并进行处理。在很多情况下会更简单。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 知道如何在 Android 浏览器上使用 keydown 吗?如果 Keydown 和 keypress 不能在所有平台上运行,它们就不是很有用...
    【解决方案4】:

    在此处查看工作示例http://jsfiddle.net/WGSvm/

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-02-01
      • 2012-05-01
      • 1970-01-01
      • 2012-10-25
      • 2016-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多