Linuchs: Feld-Position x,y berechnen

Beitrag lesen

Hallo,

bei Eingabe eines oder mehrerer Zeichen in ein inputFeld werden per Ajax mehrere Vorschlagswerte geholt und unter dem Eingabefeld angezeigt.

Da die Javascript-Routine für mehrere Felder und sogar mehrere Formulare gedacht ist, muss ich bei der ersten Nutzung das Anzeige-Feld positionieren. Damit erspare ich mir die Positionierung in den HTML-Formularen.

Doch das Anzeige-Feld wird zu weit rechts und zu weit unten platziert, als ob die Abstände doppelt berechnet werden. Aber ich komme nicht drauf, warum.

So sieht es aus:

Bildbeschreibung

Dazu die Positionierungs-Routine:

function zeigeVorschlaege()
{
  // http://www.w3schools.com/ajax/ajax_xmlhttprequest_onreadystatechange.asp
  // The onreadystatechange event is triggered every time the readyState changes.
  if ( request.readyState == 4 && request.status == 200 )
  {
    // vorschlagsfeld einmal initialisieren
    if ( document.getElementById( id_sic+"_vorschlaege" ).style.left == 0 ) 
    {
      var left =  5;
      var top  = document.getElementById( id_sic ).offsetHeight;
      var Eltern = document.getElementById( id_sic ).offsetParent;
      while (Eltern) 
      {
        if ( Eltern.style.position=="absolute" || Eltern.style.position=="relative" ) break;
        left += Eltern.offsetLeft;
        top  += Eltern.offsetTop;
        Eltern = Eltern.offsetParent;
      }
      document.getElementById( id_sic+"_vorschlaege" ).style.left    = left+"px";
      document.getElementById( id_sic+"_vorschlaege" ).style.minWidth
        = document.getElementById( id_sic ).offsetWidth +"px";
      document.getElementById( id_sic+"_vorschlaege" ).style.top     = top+"px";
    }
    document.getElementById( id_sic+"_vorschlaege" ).innerHTML     = request.responseText;
    document.getElementById( id_sic+"_vorschlaege" ).style.display = "block";
  }
//alert ("["+id_sic+"] width=["+document.getElementById( id_sic ).style.width+"]");
}

Linuchs