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に入力要素のテキストを手動で「ESCAPEPRESSED!」に設定させてから、キーダウンイベントをキャンセルします。

IE(v9)では、これは完全に機能します。ただし、Firefox(v14.0.1)では、入力内でESCを押しても何も起こりません。 ただし、行のコメントを解除した場合、またはステートメントalertの前にFireBugにブレークポイントを設定した場合は、完全に機能します。s.value = "ESCAPE PRESSED!"

私はこれに1、2時間取り組んできましたが、この時点で私は嫌悪感を持って手を挙げ、問題をここに投稿しています。なぜそれが機能しないのか分かりません。

誰かが私を助けることができますか?明らかな何かを見逃したことがありますか?ありがとう。

4

1 に答える 1

1

私は今日、これで問題を抱えています(ff v16.0.2 @ winxp)。特に、ESC で以前の (ユーザーが入力した) 値に (スクリプト設定値を) リセットするのは厄介です。これをいじってみると、TAB キーを押してもう一度戻ると、スクリプト セットの文字列が焼き付けられることに気付きました。そして確かに、次のことは (これまでのところ) 適切な回避策のようです。

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

非常に奇妙な。(これは間違いなくバグのようです。)

乾杯!

于 2012-10-28T13:22:21.810 に答える