Firefox赢得了't在keydown处理程序中设置input.value..但它在调试时起作用

Firefox won't set input.value in keydown handler... but it works while debugging?

本文关键字:input 设置 value 起作用 调试 程序 处理 keydown Firefox      更新时间:2024-01-27

现在已经是深夜了,我落后于截止日期,我正在努力解决一个对我来说非常奇怪的问题。也许这是我明显错过的东西,因为我累了,但我不知道。。。无论如何,这是我的测试用例:

<!doctype html>
<html>
<head>
  <script type="text/javascript">
    function NoEsc(e)
    {
      e = e||window.event;
      var k = e.keyCode||e.which;
      if (k!=27) return true;
      var s = e.target||e.srcElement;
      s.value = "ESCAPE PRESSED!";
      //alert("It works when this alert is shown!");
      return false;
    }
  </script>
</head>
<body onload="document.getElementById('in1').onkeydown=NoEsc;">
  <input type="text" id="in1" value="ORIGINAL VALUE">
</body>
</html>

这个想法是,在我的页面上,按ESC不会重置整个表单,只会重置有焦点的元素。对于上面的测试用例,我只是让ESC手动将输入元素中的文本设置为"ESCAPE PRESSED!",然后取消keydown事件。

在IE(v9)中,这是完美的。然而,在Firefox(v14.0.1)中,当在输入中按下ESC时,不会发生任何事情但是如果我取消对alert行的注释,或者如果我在s.value = "ESCAPE PRESSED!"语句之前在FireBug中设置了一个断点,那么它就可以完美地工作。

我已经为此工作了一两个小时,现在我厌恶地举起双手,把问题发布在这里。我不知道为什么它不起作用。

有人能帮我吗?我错过了什么显而易见的东西吗?谢谢

我自己今天也遇到了这个问题(ff v16.0.2@winxp)。尤其是在ESC时,将(脚本设置值)重置为上一个(用户输入的)值时。玩这个游戏时,我注意到TAB来回切换会在脚本集字符串中烘焙。毫无疑问,以下(到目前为止)似乎是一个不错的解决方法:

s.value = "ESCAPE PRESSED!";
s.blur();    // tab out
s.focus();   // tab right back in
return false;

很奇怪。(这肯定是个错误。)

干杯!