【问题标题】:jquery keyup not fired until user clicks page firstjquery keyup 直到用户首先点击页面才被触发
【发布时间】:2012-07-20 01:32:04
【问题描述】:

我正在尝试使用 jQuery 中的按键设置一些简单的页面导航。例如,如果用户按下左箭头键,我希望页面加载一些东西。

除了用户必须先点击浏览器窗口来注册关键事件之外,一切正常。

这是我正在使用的代码:

$(document).ready(function() {
  $(document.documentElement).live("keyup", function(event) {
      if (event.keyCode == 37) {//left arrow
        //do something here
      }
  });
});

这似乎是一个焦点问题,但我了解到使用 document.documentElement 意味着我不必特别关注任何事情。

如果用户在页面上单击一次然后点击左箭头,它就会起作用。但是如果他们加载页面并点击左箭头而不点击它不会触发。

有什么办法解决这个问题?

【问题讨论】:

  • 浏览器崩溃有焦点,但我确定不需要点击(我经常使用键事件,$(document).keydown()。
  • on 在这种情况下是没用的。只需使用keydownkeyup 函数即可。

标签: jquery


【解决方案1】:

尝试使用 .on() 并且不使用委托事件处理。

$(document).ready(function() {
   $(document).on("keyup", function(event) {
      if (event.which == 37) {//left arrow
        //do something here
      }
   });
});

OR 使用 .keyup() 方法,如下所示:

$(document).ready(function() {
   $(document).keyup(function(event) {
      if (event.which == 37) {//left arrow
        //do something here
      }
   });
});

这里不需要live(已弃用)和document.documentElement

【讨论】:

  • 我仍然需要点击那些方法的页面。
【解决方案2】:

您的页面上没有focus,这就是您在页面上need to click 的原因。将重点放在某些控件上,然后它将起作用。在这种情况下,live 不会造成任何问题,而是开始使用 on,因为 live 已被弃用。

我按状态设置焦点$('#txt1').focus(); 评论此语句,您会注意到您必须单击该页面才能获取 keyup 事件。

Live Demo

$(document).ready(function() {
  $('#txt1').focus();  //This is the statement that puts focus on page
  $(document.documentElement).live("keyup", function(event) {


      if (event.keyCode == 37) {//left arrow
        //do something here
          alert("");
      }
  });
});​

【讨论】:

  • 好的,我尝试在我的身上使用不同的元素来执行 .focus() 并且它起作用了。
【解决方案3】:

.live()-函数已弃用。试试这个:

$(document).ready(function() {
  $('body').on("keyup", function(event) {
      if (event.keyCode == 37) {//left arrow
        //do something here
      }
  });
});

【讨论】:

    【解决方案4】:

    无需使用已弃用的liveon,因为您还拥有该文档。

    另外,不需要使用document.documentElement

    简单的做

    $(document).keydown(function(){
    }); 
    

    这很好用,不需要点击。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多