Capturing onkeydown in Javascript

Ich habe ein Web-Front-End für eine AS / 400-CGI-Anwendung, mit der einige der F1-F24-Tasten (je nach Seite) sowie Bild-auf-Bild-Ab usw. verwendet werden können. Diese werden an die weitergegeben zugrunde liegende Anwendung, die sie angemessen behandelt. Zum Beispiel kann ein Benutzer auf einer bestimmten Seite entweder die Taste F3 oder die Taste F3 drücken - beide setzen die (versteckte) Variable CmdKey auf den Namen '_K03' und den Wert 'F03'. Die Tastenbedienung ist einfach und problemlos. Um mit dem Drücken einer F-Taste auf der Tastatur fertig zu werden, habe ich seit langer Zeit ein IE-kompatibles Skript, das einwandfrei funktioniert:

function setCmdKeyIE() {                                                        
  var cmdkeycode = "";                                                          
  if (window.event.keyCode != 13 &
    window.event.keyCode != 33 &                 
    window.event.keyCode != 34 &
    window.event.keyCode < 112 ) return;         
  window.event.keyCode = window.event.keyCode + 1000;                           
  if (window.event.shiftKey) window.event.keyCode = window.event.keyCode + 1000;
  switch(window.event.keyCode) {                                                
    case 1013: cmdkeycode = "EN"; break; /* Enter */                            
    case 1033: cmdkeycode = "UP"; break; /* Page Up */                          
    case 1034: cmdkeycode = "DN"; break; /* Page Down  */                       
    case 1112: cmdkeycode = "01"; break; /* F1 */                               
    case 1113: cmdkeycode = "02"; break; /* F2 */                               
    ...(F3 thru F24 here)...
    default:   return;                   /* Anything else should be ignored */
  }                                                         
  window.event.cancelBubble = true;                         
  window.event.returnValue = false;                         
  document.forms[0].CmdKey.value = "F" + cmdkeycode;        
  document.forms[0].CmdKey.name = "_K" + cmdkeycode;        
  if (ONSUBMITFUN() == true) document.forms[0].submit();    
}                                                           

Dies setzt nicht nur das CmdKey-Element korrekt, sondern überschreibt (stoppt) auch die Ausführung des Browser-Standardverhaltens (falls vorhanden) (Wenn der Benutzer beispielsweise F3 drückt, wird das Suchfeld nicht angezeigt).

Die Funktion setCmdKeyIE () wird folgendermaßen aufgerufen:

<body onKeyDown="setCmdKeyIE();" onHelp="return false;">

Ich brauche das jetzt, um mit Firefox (und möglicherweise mit anderen Browsern) zu arbeiten, und ich habe alle möglichen Probleme. Ich habe anfangs die setCmdKeyIE-Funktion geändert (ja, ich weiß, dass der Name geändert werden sollte, sobald er nicht mehr IE-spezifisch ist, aber das ist meine geringste Sorge!), Um das Ereignis als Parameter zu erhalten (was nur bei FF der Fall wäre). Ich dachte) oder das aktuelle Verhalten zu verwenden, wenn es nicht bestanden wird (mit IE). Ich habe auch eine andere Verarbeitung hinzugefügt, um die Weitergabe von FF-Ereignissen zu stoppen, aber sie funktioniert nicht ...

Hier ist der neue, nicht funktionierende Code - kann eine Art Seele auf den Fehler meiner Art hinweisen?

function setCmdKey(e) {
  if (!e) {
    var e = window.event; /* IE event-handling */
  }
  var wrkkeyCode = e.keyCode;
  if (wrkkeyCode != 13 &
      wrkkeyCode != 33 &
      wrkkeyCode != 34 &
      wrkkeyCode != 27 &
      wrkkeyCode < 112 ) return;
  wrkkeyCode = wrkkeyCode + 1000;
  if (e.shiftKey) wrkkeyCode = wrkkeyCode + 1000;
  var cmdkeycode = "";
  switch(wrkkeyCode) {
    case 1013: cmdkeycode = "EN"; break; /* Enter */
    case 1033: cmdkeycode = "UP"; break; /* Page Up */
    case 1034: cmdkeycode = "DN"; break; /* Page Down  */
    case 1112: cmdkeycode = "01"; break; /* F1 */
    case 1113: cmdkeycode = "02"; break; /* F2 */
    ...(F3 thru F24 here)...
    default:   return;               /* Anything else should be ignored */
  }
  if (e.stopPropagation) {           /* FF */
    e.stopPropagation();
    e.preventDefault();
  }
  else {                             /* IE */
    e.cancelBubble = true;
    e.returnValue = false;
  }
  document.forms[0].CmdKey.value = "F" + cmdkeycode;
  document.forms[0].CmdKey.name = "_K" + cmdkeycode;
  if (ONSUBMITFUN() == true) document.forms[0].submit();
}

Muss ich von setCmdKeyIE mit FF false zurückgeben? Gilt dies auch dann, wenn diese Prozedur false zurückgibt?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage