Bogus: Formularfeld über JS-Variable fokusieren

Sorry, aber ich vergesse es immer wieder, da ich es nur alle paar Jahre mal brauche: Wie bekomm ich den Focus mittels javascript auf ein formularfeld, dessen feldname aus ner variable kommt?

Ich habe zb. folgende Felder im Formular
<input type="text" name="test[11]" size="30" onkeydown="check_key(11)"> <input type="text" name="test[12]" size="30" onkeydown="check_key(12)">
<br><input type="text" name="test[21]" size="30" onkeydown="check_key(21)"> <input type="text" name="test[22]" size="30" onkeydown="check_key(22)">

bei onkeydown wird die funktion aufgerufen und quasi die aktuelle feldnummer übergeben.

das script prueft dann welche taste gedrückt wurde und soll ein entsprechendes feld darüber, darunter oder danach focusieren.

function check_key(ev) {
 if(document.all) {
  taste = window.event.keyCode;
 } else if(document.getElementById&&!document.all) { // N6
  taste=ev.which;
 }

var next=false;
 if(taste == 37) // left - funzt nicht
  next = ev-1;
 else if(taste == 38) // up
  next = ev-10;
 else if(taste == 39) // right - funzt nicht
  next = ev+1;
 else if(taste == 40) // down
  next = ev+10;
 else if(taste == 13) // enter
  next = ev+1;
 else
  next = ev;

document.jstest.test[next].focus();
 if (next)
  alert(next);
}

ein ähnliches problem hatte ich schon öfter, und inzwischen auch gelöst. aber wie gesagt: in den zigtausend zeilen und hunderten scripten find ich es nicht mehr. und mein kopf weis nicht mehr wie das ging.

danke für eure hilfe!

  1. Hallo,

    <input type="text" name="test[11]" size="30" onkeydown="check_key(11)"> <input type="text" name="test[12]" size="30" onkeydown="check_key(12)">

    function check_key(ev) {

    Das geht so nicht. Entweder du übergibst eine Nummer oder das Event-Objekt (oder beides). Andernfalls wirst du im Firefox nicht an das Event-Objekt kommen.

    Du kannst schreiben: onkeydown="check_key(event, 11)"
    Dann kannst du das Event-Objekt und die Zahl als Parameter annehmen.

    function check_key (ev, nummer) {...}

    Und vergiss Browserabfragen. Wenn du das Eventobjekt hast, kannst du einfach schauen, welche Eigenschaften existieren:

    taste = ev.which || ev.keyCode;

    Einfacher wärs natürlich, dieses ganze JavaScript nicht ins HTML kleben zu müssen.

    Mathias

    1. es geht doch.
      hier der funktionierende js-code:

      (nur der teil mit dem übergeben der variable und dem setzen des focus. rest bleibt gleich wie gehabt)

      var field = "test["+next+"]"
      document.jstest.elements[field].focus();