禁用输入字段时,JQuery中的按键停止工作

时间:2012-01-15 21:33:36

标签: jquery focus keypress

我将一个按键绑定到文档,除了运行一些命令(在本例中为alert)之外,我还禁用了一个输入框。

  <script type="text/javascript" src="jquery.js"></script>
  <script type="text/javascript">
  $(document).keypress(function(e) {
   if (e.keyCode == 27) {
    alert("escape pressed");
    $("#inputField").attr('disabled','disabled');
   }
  });
  </script>

  <input type="text" id="inputField" />

问题是如果我在inputField内按下escape,则escape不再触发警报,除非我再次在页面内手动点击。

有没有人知道为什么这样或者我怎么能用按键禁用输入框而不会失去对窗口的关注?

2 个答案:

答案 0 :(得分:2)

我认为这是Firefox特有的问题。焦点在禁用的文本框中被锁定,并且没有触发按键,但Tab键正在工作。 在Chrome中,禁用文本框后正确发生按键事件。 无论如何,您可以使用tabIndex属性并在禁用文本框之前将焦点设置为其他元素。

 $("#cover").focus();
 $("#inputField1").attr('disabled', 'disabled');
 alert("enter pressed");

在这里看一个演示: (转义键在Chrome中无效我已将其更改为输入密钥http://jsfiddle.net/diode/4Xvqj/show

...

答案 1 :(得分:0)

描述

使用jQuery的.keyup()方法。你也忘了等到DOM完全可用。您可以将焦点设置为.keyup()方法中的body元素。

查看我的示例和此jsFiddle Demonstration

示例

$(function() {
  $(document).keyup(function(e) {
   if (e.keyCode == 27) {
    alert("escape pressed");
    $("#inputField").attr('disabled','disabled');
    $("body").focus();
   }    
  });
});

更新

jQuery函数.focus()不适用于firefox上的每个元素 body 。您可以尝试将焦点设置在页面上的其他元素上。