2

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

<!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之前在 FireBug 中设置断点,那么它可以完美运行。s.value = "ESCAPE PRESSED!"

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

有人可以帮我吗?我错过了什么明显的东西吗?谢谢。

4

1 回答 1

1

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

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

很奇怪。(这绝对似乎是一个错误。)

干杯!

于 2012-10-28T13:22:21.810 回答