【问题标题】:jQuery focus function returns falsejQuery 焦点函数返回 false
【发布时间】:2012-11-07 08:46:19
【问题描述】:

我需要一些关于 jQuery 焦点功能的帮助。 我有一个输入字段,当按下 Enter 并且输入字段具有焦点时,我想做一些事情。

HTML:

<form class="myform">
<ul>
<input class="inputfield" type="text">
</ul>
</form>

和 jQuery:

$(document).keyup(function(event) {
    if (event.keyCode == 13 && $(':input').is(':focus')) {
        //do stuff here
    }
});

.is(':focus') 总是返回 false。

有人知道这里有什么问题吗?

谢谢!

【问题讨论】:

  • 看起来可以工作jsfiddle.net/VVQ8x
  • 不确定您的确切需求是什么,但使用表单的 submit 事件比采用这种迂回方法更简单。

标签: jquery focus


【解决方案1】:

为什么不直接将 keyup 事件分配给输入字段呢?

$('.inputfield').keyup(function(event) {
    if (event.keyCode == 13) {
        // Enter key pressed ... do stuff here
    }
});

【讨论】:

    【解决方案2】:

    最好将处理程序绑定到文本框本身

    $('.inputfield').on('keydown', function (event) {
        if (event.keyCode == 13) {
            //do stuff here
        }
    });
    

    如果你有 jQuery ui 你可以使用

    $.ui.keycode.ENTER
    

    如果你愿意

    【讨论】:

      【解决方案3】:

      .is(':focus') 应该适用于 jquery 1.6+。

      或者您可以尝试将“旧”javascript activeElement 属性包装在 jquery 对象中并将其嵌入到 onlaod js 回调函数中:

      window.onload = function(){
          $(document).keyup(function(event) {
             if (event.keyCode == 13 && $(document.activeElement).is('.inputfield')) {
                 //do stuff here
             }
          });
      };
      

      【讨论】:

      • 我喜欢这个解决方案,它对我有用。但是有一些奇怪的事情:当我加载页面时,我必须等待大约 10 秒才能触发关键事件......
      • 不知道为什么,但我将 action="" 更改为 action="javascript:void(0);"现在工作正常
      • 你试过把你的函数嵌入到加载回调中。生病更新我的答案,敬请期待......
      • 啊,对不起...我在错误的答案下发表了评论。我正在使用 Matei Mihai 的答案。但所有答案都奏效了……我认为 Matei Mihai 的答案是最优雅的。
      猜你喜欢
      • 1970-01-01
      • 2012-03-31
      • 1970-01-01
      • 1970-01-01
      • 2012-06-26
      • 2019-01-09
      • 1970-01-01
      • 1970-01-01
      • 2020-10-07
      相关资源
      最近更新 更多