Rene: Tastendruck im IE abfangen

Hi,
der IE hat die dumme Angewohnheit bei Druck auf die ESC-Taste alle Formulareingaben wieder zu löschen bzw. auf den letzten Wert zurückzustellen (wie beim Klick auf einen Reset-Button). Jetzt dachte ich mir, trickse ich den IE aus, indem ich die Taste ESC per Javascript abfange

function fesc()
{
   if(window.event)
   {
      var druck = window.event.keyCode;
      if(druck == 27){return false;}
   }
}

aber das hat leider nicht funktioniert. Ist das ein "Feature" des IE? Und kann man dieses "Feature" irgendwie deaktivieren?

Und bevor die Diskussion wieder losgeht: Es handelt sich um eine Intranet-Seite, keine Besucher-Seite!

  1. Hallo Rene,

    der IE hat die dumme Angewohnheit bei Druck auf die ESC-Taste alle Formulareingaben wieder zu löschen bzw. auf den letzten Wert zurückzustellen

    alle? Das wäre mir neu. Du meinst sicher das aktuell aktive (fokussierte) Eingabefeld.

    var druck = window.event.keyCode;
       if(druck == 27){
          return false;}

    Das "return false;" müsste eigentlich langen. Welche IE Version?
    Probier doch noch ein:

    if(druck == 27){
            event.cancelBubble=true;
            return false;
            }

    HTH

    Grüße, Jochen

    --
    Kritzeln statt texten:
    Scribbleboard
    1. Hi

      alle? Das wäre mir neu. Du meinst sicher das aktuell aktive (fokussierte) Eingabefeld.

      Da hast du recht! Aber wenn man mehrmals die ESC-Taste drückt, werden alle Änderungen zurückgenommen.

      var druck = window.event.keyCode;
         if(druck == 27){
            return false;}

      Das "return false;" müsste eigentlich langen. Welche IE Version?
      Probier doch noch ein:

      if(druck == 27){
              event.cancelBubble=true;
              return false;
              }

      HTH

      Grüße, Jochen

      "cancelBubble" kannte ich noch gar nicht. Hat aber leider auch nicht funktioniert. Ich habe jetzt folgendes ausprobiert. Ich bin aber noch nicht so ganz zufrieden. Falls man aus Versehen die ESC-Taste drückt, sollte es seinen Zweck erfüllen. Wer aber mehrmals die ESC-Taste drückt (und dann alle Felder leer sind) und dann mit "Ok" bestätigt ist selbst schuld, oder?

      <html>
      <head>
      <script language="javascript">
      var last_value = new Array();
      function fesc(t,v)
      {
         if(window.event)
         {
            var druck = window.event.keyCode;
            if(druck == 27)
            {
               var check = confirm("Ooops, Sie haben aus Versehen auf die ESC-Taste gedrückt! Klicken Sie auf „Abbrechen“, um den letzten Wert wiederherzustellen.");
               if(check == false)
               {
                  for(var a in last_value)
                     document.getElementById(a).value = last_value[a];
               }
            }
            else
            {
               last_value[t] = v;
            }
         }
      }
      </script>
      </head>
      <body>

      <form>
      <input type="text" onkeyup="fesc(this.id, this.value);" id="1">
      <input type="text" onkeyup="fesc(this.id, this.value);" id="2">
      <input type="text" onkeyup="fesc(this.id, this.value);" id="3">
      </form>
      </body>
      </html>

      1. Hallo,

        "cancelBubble" kannte ich noch gar nicht. Hat aber leider auch nicht funktioniert.
        <input type="text" onkeyup="fesc(this.id, this.value);" id="1">

        ach so. Im onkeyup ist das vermutlich viel zu spät. Wenn, dann solltest du den keydown abfangen.
        Guck mal auf diese Testseite

        Grüße,

        Jochen

        --
        Kritzeln statt texten:
        Scribbleboard
        1. Hallo,

          "cancelBubble" kannte ich noch gar nicht. Hat aber leider auch nicht funktioniert.
          <input type="text" onkeyup="fesc(this.id, this.value);" id="1">

          ach so. Im onkeyup ist das vermutlich viel zu spät. Wenn, dann solltest du den keydown abfangen.
          Guck mal auf diese Testseite

          Grüße,

          Jochen

          Ja, supergeil der Link! Das Skript muss ich nur noch an meine Bedürfnisse anpassen, dann sollte es wie gewünscht funktionieren.

          Danke und Gruß

      2. <input type="text" onkeyup="fesc(this.id, this.value);" id="3">

        warum machst du es dir so umständlich und übergibst nicht einfach direkt this?
        Dann hast du vollen Zugriff auf das Element und kannst dir die id sparen.

        Struppi.

        --
        Javascript ist toll (Perl auch!)
        1. <input type="text" onkeyup="fesc(this.id, this.value);" id="3">

          warum machst du es dir so umständlich und übergibst nicht einfach direkt this?
          Dann hast du vollen Zugriff auf das Element und kannst dir die id sparen.

          Struppi.

          Manchmal macht man sich das Leben etwas schwerer, da es sonst zu einfach wäre ;-)

          Danke und Gruß