Escape keycode (27) zieht im IE (verschiedene Versionen) nicht

  • Themenstarter Themenstarter Netzwerkidi
  • Beginndatum Beginndatum
N

Netzwerkidi

Hallo in die Runde,

weiß jemand, wie man den keyCode 27 (Escape) beim Internet-Explorer einfängt?

Firefox, Opera ist kein Problem, aber im IE muss der Anwender explizit einen Button betätigen, weil es mir nicht gelingt, dass die Escapetaste zieht.

Habe mir schon diversen Rat geholt wie hier und hier, komme aber nicht weiter.

Grüße
Idi
 
Code wäre ganz sinnvoll ;-)

Im IE bekommst du kein Event Objekt übergeben, sondern musst auf window.event zugreifen. Und dann heißt es auch nicht keyCode sondern which.
 
Hai CPoly,

habe mir schon so etwas gedacht.

Allerdings sollte doch zumindest der Event ziehen, war mein Gedanke, schließlich ist er ja registiert - hoffe ich jedenfalls...

Denn es kommt keine Fehlermeldung bei der Registrierung, noch eine beim Löschen, allerings wird auch der Event nicht ausgelöst.

Muss ich den onkeypress-Event evtl. anders registrieren?

Momentan mache ich das so:

Code:
function addEvent (node,evt,fnc) {
  if (node.addEventListener)
    node.addEventListener(evt,fnc,false);
  else if (node.attachEvent)
    node.attachEvent('on'+evt,fnc);
  else...

addEvent (window, 'keypress', meineKeyPressFunction);

Die Funktion "meineKeyPressFunction" wird nicht angelaufen.

Löschen dann mit removeEvent.

Grüße
Idi
 
Zuletzt bearbeitet von einem Moderator:
Nimm besser "document" anstatt "window". Außerdem ist "keypress" eher für Zeichen-Eingaben gedacht. Nimm also lieber "keydown" oder "keyup".

HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
	<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
	
	<title>Escape key</title>
</head>

<body>
	<script type="text/javascript">
	/* <![CDATA[ */
	function meineKeyPressFunction(e) {
		e = e || window.event;
		
		alert(e.keyCode || e.which);
	}
	
	function addEvent (node, evt, fnc) {
		if (node.addEventListener)
			node.addEventListener(evt, fnc, false);
		else if (node.attachEvent)
			node.attachEvent('on' + evt, fnc);
	}
	
	addEvent (document, 'keydown', meineKeyPressFunction);
	/* ]]> */
	</script>
</body>

</html>
 
Merci, CPoly. Aber bedeutet das, dass man die Escape im IE nicht nutzen kann? Das wäre wirklich dumm, weil die Escape-Taste die Taste schlechthin für den Abbruch von irgendetwas ist.

Aber wo Du gerade da bist, ich habe noch eine weitere, wahrscheinlich nur klitzekleine Herausforderung für Dich.

Wie schreibt man einen Callback?

Ich will, dass in der folgenden Funktion erst dann die Meldung kommt, wenn der Loop endgültig fertig ist.


Code:
<html>
  <body>
  
  <h1 id="head1">Header 1</h1>
  
  <script type="text/javascript">
  function loop (obj,n) {
    obj.style.fontSize=n+"px";
    n++;
    if (n<50) {
      setTimeout(function () {loop(obj,n);},10);
    }
  }
  var o = document.getElementById('head1');
  loop(o,10);
  document.write('Fertigmeldung - zu früh******!');
  </script>  

  </body>
</html>
 
Merci, CPoly. Aber bedeutet das, dass man die Escape im IE nicht nutzen kann?

Doch, kannst du. Bei mir gibt der oben gezeigte Code in IE 6 und 8 "27" aus, wenn ich die ESC Taste drücke. Das wird ja in anderen JavaScript Projekten wie z.B. dem jQuery UI Dialog zum schließen benutzt. Also eigentlich sollte das kein Problem sein.


Ich will, dass in der folgenden Funktion erst dann die Meldung kommt, wenn der Loop endgültig fertig ist.

Um callbacks zu verstehen, muss man wissen, dass Funktionen nichts anderes sind als Instanzen der Klasse "Function" (ja, man kann Funktionen auch mittels Konstruktor erzeugen). Deshalb kannst du die wie jedes andere Objekt einfach übergeben.

HTML:
<html>
  <body>
  
  <h1 id="head1">Header 1</h1>
  
  <script type="text/javascript">
  function loop (obj, n, fn) {
    obj.style.fontSize=n+"px";
    n++;
    if (n<50) {
      setTimeout(function () {loop(obj,n,fn);},10);
    } else {
      fn();
    }
  }
  
  var o = document.getElementById('head1');
  
  loop(o, 10, function() {
    alert('Fertigmeldung - zu früh******!');
  });
  </script>  
 
  </body>
</html>

In dem Fall ist es eine Anonyme Funktion. Aber du kannst auch irgendwo im Code "function foo()" geklarieren und als Parameter nur noch "foo" übergeben (OHNE die Klammer hintendran! Dadurch würde sie ja ausgeführt).

Übrigens solltest du kein "document.write" benutzen, sondern eher getElementById (und ähnliche) und innerHTML.
 
Ach, jetzt, wo ich den Esc-/KeyDown-Code von dir teste, merke ich erst, was du eigentlich gemeint hast.
Für KeyDown einen Event registrieren, aber dann trotzdem Esc nutzen.
Wobei, liebt wohl am Bezug: document statt window. Aber egal. Klappt nun so, wie ich das wollte.
Hast mir definitiv den Tag gerettet, CPoly!
 

Neue Beiträge

Zurück