【问题标题】:event.preventDefault() on keydown isn't working [duplicate]keydown 上的 event.preventDefault() 不起作用[重复]
【发布时间】:2017-07-30 11:31:49
【问题描述】:

试图捕捉引导选项卡面板菜单上的按键,但它只是冒泡忽略放置在选项卡的 keydown 处理程序上的 preventDefault()。

document.onkeydown = function(e) {
  console.log("document catched the keydown event");

};

$('body > div > ul > li > a').on("keydown",function (e) {
  console.log("handled by the child - stop bubbling please");
  e.preventDefault();

});

示例: http://www.bootply.com/xUlN0dLRaV

我在这里错过了什么?

【问题讨论】:

  • e.stopPropagation()?
  • 你需要使用stopPrepagation之前的回答,这显然不是重复的。我们的伙伴问的是为什么他使用的功能不起作用,而不是它与其他功能有何不同。

标签: javascript jquery


【解决方案1】:

除了e.preventDefault,您还必须使用e.stopPropagation() 来防止事件冒泡。在您的情况下,您还可以从事件处理程序中返回false,这两者都可以:

$('body > div > ul > li > a').on("keydown",function (e) {
  console.log("handled by the child - stop bubbling please");
  return false;
});

【讨论】:

    【解决方案2】:

    试试e.stopPropagation()

    e.stopPropagation() 防止事件在 DOM 树中冒泡,防止任何父处理程序收到事件通知。

    $('body > div > ul > li > a').on("keydown",function (e) {
      console.log("handled by the child - stop bubbling please");
      e.preventDefault();
      e.stopPropagation();
    });
    

    区别?

    What's the difference between event.stopPropagation and event.preventDefault?

    【讨论】:

    • 当您确定某个问题是重复的而不是回答它时,请发表评论说它是重复的,以便人们可以正确地关闭它。 (当然,在大约 1400 点代表中,您将能够直接投接近票。)
    猜你喜欢
    • 2019-04-14
    • 2016-02-21
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    • 1970-01-01
    • 2012-12-17
    相关资源
    最近更新 更多