Tab-Key ignorieren

timestamp

Mitglied Käsekuchen
Hi

ich stehe hier gerade vor einem Problem. Ich schreibe gerade an einer Art "Excel" für das Internet und möchte dort durch das Drücken der Tabulatortaste in die nächste Zelle springen. Leider schiebt mir der Browser den Cursor allerdings jedesmal in die Adresszeile. Gibt es da Abhilfe?

Javascript:
function edit(i,k){
  saved = false;
  if( document.getElementById('editfield') != null )
    return false;
  obj = document.getElementById(i+"."+k);
  value = obj.innerHTML;
  obj.innerHTML = "<input type='text' onkeydown='keyAction(event,this);' id='editfield' class='"+i+"."+k+"' onblur='updateTable("+i+","+k+",this.value);' value='"+value+"' />";
  setTimeout("document.getElementById('editfield').focus()", 100);
}
function updateTable(i,k,value){
  table[i][k] = value;
  document.getElementById("outer").innerHTML = displayTable(table);
}
function keyAction(e, obj){
  if( e.keyCode == 13 )
    obj.blur();
  if( e.keyCode == 9 ){
   obj.blur();
   id = obj.className.split('.');
    i  = parseInt(id[0]);
    k  = parseInt(id[1]);
    if( typeof table[i][k+1] != "undefined" )
      edit(i,(k+1));
    else if( typeof table[i+1][0] != "undefined" )
      edit((i+1),k);
    else
      edit(0,0);
   }
}

edit: Ich habe es jetzt soweit hinbekommen, dass ich ins jeweils nächste Feld springen kann (geänderte Zeile: 8). Nur wenn ich im Letzten Feld bin (Zeile27) springe ich nicht zurück an den Anfang. Gibt es dafür noch einen Lösungsvorschlag?
 
Zuletzt bearbeitet:
Ein return false; sollte da helfen.

Ich weiss jetzt nicht, welchen keyCode der Tabulator hat, aber rein vom Sinn her müsste es dann wie folgt aussehen:
Javascript:
  if( e.keyCode == 9 ){
//   do something..
  return false;
}
 
Leider funktioniert das nicht.

Wie genau sieht dein Testszenario aus?

Folgendes funktioniert bei mir in Safari und Firefox auf Mac wunderprächtig:
HTML:
<html>
	<head>
		<script type="text/javascript">
			document.onkeydown = function(e){
				var event = window.event ? window.event : e;
				
				if ( event.keyCode == 9 ) return false;
			}

		</script>
	</head>
	<body>
		<input><input>
	</body>
</html>
 
Ich klicke in ein Tabellenfeld. Der Inhalt wird dann durch ein Textfeld ersetzt. Wenn ich, während ich in diesem Textfeld bin (d.h. es den Focus hat), die Tab-Taste drücke, soll automatisch ein Feld weiter gesprungen werden. Das funktioniert auch soweit. Lediglich das Springen vom letzten ins erste Feld funktioniert nicht.

edit:
So, ich habe mal deine Lösung eins zu eins kopiert und es funktioniert. Vielen Dank :)
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück