Javascript Firefox赢得了';t在键控处理程序中设置input.value。。。但它在调试时工作吗?

Javascript Firefox赢得了';t在键控处理程序中设置input.value。。。但它在调试时工作吗?,javascript,firefox,dom,Javascript,Firefox,Dom,现在已经很晚了,我赶在最后期限之后,我正在努力解决一个对我来说非常非常奇怪的问题。也许是因为我累了而错过了什么,但我不知道。。。无论如何,这是我的测试用例: <!doctype html> <html> <head> <script type="text/javascript"> function NoEsc(e) { e = e||window.event; var k = e.keyCode||e.w

现在已经很晚了,我赶在最后期限之后,我正在努力解决一个对我来说非常非常奇怪的问题。也许是因为我累了而错过了什么,但我不知道。。。无论如何,这是我的测试用例:

<!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>

功能NoEsc(e)
{
e=e | | window.event;
var k=e.keyCode | | e.which;
如果(k!=27)返回true;
var s=e.target | | e.src元素;
s、 value=“按ESCAPE!”;
//警报(“显示此警报时,它会工作!”);
返回false;
}
这个想法是,在我的页面上,按ESC键不会重置整个表单,只会重置具有焦点的元素。对于上面的测试用例,我只是让ESC手动将输入元素中的文本设置为“ESCAPE PRESSED!”,然后取消keydown事件

在IE(v9)中,这种方法非常有效。然而,在Firefox(v14.0.1)中,当在输入中按下ESC键时,不会发生任何事情但是如果我取消注释
警报
行,或者如果我在
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;
很奇怪。(这显然是一个bug。)


干杯

嗯。。。它似乎与
onkeydown
有关。它适用于
onkeyup
。我需要使用onkeydown:我必须取消它,这样默认的ESC操作就不会发生(重置整个表单)。一旦取消,onkeypress和onkeyup将不会发生。但是表单是在keydown或keyup上重置的吗?如果在keydown而不是keyup上不阻止事件,则可以。Firefox似乎以某种方式将字段值重置为上一个/原始值。如果查看此处并键入一些字符和/或按escape键,则该值会更改。但如果随后再次按住ESC键,则会显示上一个值。我不能真正解释这个方法,但这可能就是为什么这个值没有改变的原因。你可以看到FF对ESC keydown或者keypress上的字段做了一些事情。。。它应该重置为“原始值”,但由于某种原因,它重置为该字段在编程更改之前的最后一个值(即在按ESC键之前最后键入的值)。在我看来,这似乎是Firefox中的一个bug——这永远不会发生,除非您在脚本中更改
元素.defaultValue
。无论如何,这对我没有帮助——我必须阻止它,因为我不希望表单中的其他字段发生更改!在早期版本中会发生这种情况吗?也许你应该提交一份bug报告。Dejan,请看我上面2012-07-22 21:52的评论。。。这是Firefox中的一个已知错误。这里的细节:好的。哇!没有看到“显示X更多评论”的点击。(抱歉,这只是我在论坛上的第二篇帖子。)是的,至少模糊/重新聚焦解释了为什么在原始列表中取消对alert()行的注释可以使它工作。无论如何谢谢你自己的方法和找到我们的错误报告!