Knud: Span-Bereiche dynamisch ändern funktioniert nicht

Hi!

Hab mal wieder ein dickes Brett vorm Kopf oder was ähnliches!

Mein Problem:
Mittels PHP lese ich Informationen aus einer Tabelle und speichere
diese javascriptmäßig in ein Array. Funktioniert auch prima!
Der Benutzer gibt über ein Formular eine Personalnummer und auch eine Artikelnummer ein.
Beim Verlassen des Eingabefeldes soll eine Funktion augfgerufen werden, dass die
entsprechende Bezeichnung oder den Namen aus dem Array hinter das Eingabefeld schreibt.
Die dynamischen Bereiche habe ich mir SPAN definiert.
Leider werden die Bereiche nicht aktualisiert. Stattdessen gibt's Javascript-Errors.
Ich weiß nicht, ob die Span's mit position:absolute definiert werden müssen, damit's geht,
aber das wäre auch schlecht. So ne absolute Positionierung geht meiner Meinung nach immer in die Hose.

Ich poste hier mal die entsprechenden Bereiche des Quelltexts, in der Hoffnung, dass mir
jemand beio der Lösung des Problems behilflich sein möchte.

Hier der Javascript-Teil:

<script LANGUAGE="JavaScript">
var a_essen = new Array(), a_mitarb = new Array(), zaehler = 0;
var ie4 = (document.all) ? true : false;
var ns4 = (document.layers) ? true : false;
var ns6 = (document.getElementById && !document.all) ? true : false;
nextfield = "pnr[1]";

function a_essen_neu(artikelnummer, bezeichnung, preis, bestand ) {
 a_essen[zaehler] = new Array(3);
 a_essen[zaehler][0] = artikelnummer;
 a_essen[zaehler][1] = bezeichnung;
 a_essen[zaehler][2] = preis;
 a_essen[zaehler][3] = bestand;
 zaehler++;
}

function a_mitarb_neu(personalnummer, name, standort) {
 a_essen[zaehler] = new Array(2);
 a_essen[zaehler][0] = personalnummer;
 a_essen[zaehler][1] = name;
 a_essen[zaehler][2] = standort;
 zaehler++;
}

function writetolayer(lay,x_array,x_nr) {
 if (x_nr > 0) {
  if (lay.substr(0,3) == "art") {
   txt_neu = "Diese Artikelnummer wurde nicht gefunden!!!";
   for (i = 0; i < x_array.length; i++) {
    if (x_array[i][0] == x_nr) {
     txt_neu = x_array[i][1]+" ("+x_array[i][3]+") "+x_array[i][2]+" DM";
     break;
    }
   }
  } else {
   txt_neu = "Diese Personalnummer wurde nicht gefunden!!!";
   for (i = 0; i < x_array.length; i++) {
    if (x_array[i][0] == x_nr) {
     txt_neu = x_array[i][1]+" ("+x_array[i][2]+")";
     break;
    }
   }
  }
  if (ie4) {
   document.all[lay].innerHTML = txt_neu;
  }
  if (ns4) {
   document[lay].document.write(txt_neu);
   document[lay].document.close();
  }
  if (ns6) {
   over = document.getElementById([lay]);
   range = document.createRange();
   range.setStartBefore(over);
   domfrag = range.createContextualFragment(txt_neu);
   while (over.hasChildNodes()) {
    over.removeChild(over.lastChild);
   }
   over.appendChild(domfrag);
  }
 }
}

function keyDown(DnEvents) {
 ntaste = DnEvents.which;
 if (ntaste == 13) {
  xeval = 'document.schnell[' + nindex + '].focus()'
  eval(xeval);
  return false;
 }
}
document.onkeydown = keyDown;
if (netscape) document.captureEvents(Event.KEYDOWN|Event.KEYUP);
</script>

Hier kommt der PHP-Teil:
  $abfrage = "select * from essenstamm";
  $erg = mysql_db_query($dbname,$abfrage,$verbindung);
  $code = "";
  while($row = mysql_fetch_array($erg)) {
   extract($row);
   $code .= "a_essen_neu('$artikelnummer','$bezeichnung','$preis','$bestand');\n";
  }
  $abfrage = "select * from personal";
  $erg = mysql_db_query($dbname,$abfrage,$verbindung);
  $code = "";
  while($row = mysql_fetch_array($erg)) {
   extract($row);
   $code .= "a_mitarb_neu('$personalnummer','$name','$standort');\n";
  }

Und jetzt noch der Html-Teil (uiiih, unübersichtlich)

<tr><td> Personalnummer: <input type=text name="pnr[1]" size=4 maxlength=4 onFocus="nindex=5;" onBlur="writetolayer('personal1','a_mitarb',this.value)">
   <SPAN ID="personal1">                              </span></td>
   <td> Artikelnummer: <input type=text name="enr[1]" size=5 maxlength=5 onFocus="nindex=6;" onBlur="writetolayer('artikel1','a_essen',this.value)">
   <SPAN ID="artikel1">                              </span></td><tr>
  <tr><td> Personalnummer: <input type=text name="pnr[2]" size=4 maxlength=4 onFocus="nindex=7;" onBlur="writetolayer('personal2','a_mitarb',this.value)">
   <SPAN ID="personal2">                              </span></td>
   <td> Artikelnummer: <input type=text name="enr[2]" size=5 maxlength=5 onFocus="nindex=8;" onBlur="writetolayer('artikel2','a_essen',this.value)">
   <SPAN ID="artikel2">                              </span></td><tr>
  <tr><td> Personalnummer: <input type=text name="pnr[3]" size=4 maxlength=4 onFocus="nindex=9;" onBlur="writetolayer('personal3','a_mitarb',this.value)">
   <SPAN ID="personal3">                              </span></td>
   <td> Artikelnummer: <input type=text name="enr[3]" size=5 maxlength=5 onFocus="nindex=10;" onBlur="writetolayer('artikel3','a_essen',this.value)">
   <SPAN ID="artikel3">                              </span></td><tr>
  <tr><td> Personalnummer: <input type=text name="pnr[4]" size=4 maxlength=4 onFocus="nindex=11;" onBlur="writetolayer('personal4','a_mitarb',this.value)">
   <SPAN ID="personal4">                              </span></td>
   <td> Artikelnummer: <input type=text name="enr[4]" size=5 maxlength=5 onFocus="nindex=12;" onBlur="writetolayer('artikel4','a_essen',this.value)">
   <SPAN ID="artikel4">                              </span></td><tr>
  <tr><td> Personalnummer: <input type=text name="pnr[5]" size=4 maxlength=4 onFocus="nindex=13;" onBlur="writetolayer('personal5','a_mitarb',this.value)">
   <SPAN ID="personal5">                              </span></td>
   <td> Artikelnummer: <input type=text name="enr[5]" size=5 maxlength=5 onFocus="nindex=14;" onBlur="writetolayer('artikel5','a_essen',this.value)">
   <SPAN ID="artikel5">                              </span></td><tr>
  <tr><td> Personalnummer: <input type=text name="pnr[6]" size=4 maxlength=4 onFocus="nindex=15;" onBlur="writetolayer('personal6','a_mitarb',this.value)">
   <SPAN ID="personal6">                              </span></td>
   <td> Artikelnummer: <input type=text name="enr[6]" size=5 maxlength=5 onFocus="nindex=4;" onBlur="writetolayer('artikel6','a_essen',this.value)">
   <SPAN ID="artikel6">                              </span></td><tr>
  </table>

Hoffnungsvolle Grüße,

Knud

  1. Hab mal wieder ein dickes Brett vorm Kopf oder was ähnliches!

    Ich auch öfters...

    Ich weiß nicht, ob die Span's mit position:absolute definiert werden müssen, damit's geht,
    aber das wäre auch schlecht. So ne absolute Positionierung geht meiner Meinung nach immer in die Hose.

    Nach meiner Erfahrung muß man absolute Positionierung angeben. Mit allen schlechten Konsequenzen :-(
    Evtl. direkt neben deinem <span>-Bereich einen relativ positionieren <span>-Bereich definieren (kann ruhig leer sein), davon die Position bestimmen (evtl. Parent-Elemente beachten usw), und diese deinen absolut positionierten Bereich zuweisen. Ziemlich umständlich, aber ich habe noch keinen besseren Weg gefunden.

    Hoffnungsvolle Grüße,

    Viel Erfolg.
    Heiko