Daniel Reckling: Input-Feld auslesen ohne <form>-Tag

Ich habe auf einer Seite ein Inputfeld, dessen Wert ich mittels Javascript auslesen will. Das sieht so aus:

<input onkeydown="doTextSearchCheck(event);" onfocus="clearTextSearchField()" onblur="fillTextSearchField()" id="TextSearch" type="text" class="textsearch" value="" />

Via Prototype greife ich wiefolgt darauf zu:

$('TextSearch').value

(macht das gleiche wie document.getElementById('TextSearch').value)

Dies klappt in Firefox und Opera reibungslos, nur der Internet Explorer liefert immer einen leeren Wert zurück, selbst wenn der User bereits in das Feld getippt hat.

Beim Googlen bin ich immer wieder auf die Methode gestoßen, dass Formularfelder mittels formname.usw ausgelesen werden können. Leider habe ich in diesem Fall kein Formtag, demnach auch kein Form-Name und suche daher eine andere Möglichkeit. Wer weiß mehr?

Vielen Dank im Vorfeld,
Daniel Reckling

  1. hi,

    Beim Googlen bin ich immer wieder auf die Methode gestoßen, dass Formularfelder mittels formname.usw ausgelesen werden können. Leider habe ich in diesem Fall kein Formtag, demnach auch kein Form-Name und suche daher eine andere Möglichkeit. Wer weiß mehr?

    Der Zugriff auf das Inputfeld sollte über getElementById, getElementsByTagName oder vergleichbares funktionieren.
    Aber wenn Prototype eigentlich genau das schon macht, vermute ich eher, dass der IE bei Inputfeldern, die nicht in einem Formular liegen, gar kein value bereitstellt ...

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. Dies klappt in Firefox und Opera reibungslos, nur der Internet Explorer liefert immer einen leeren Wert zurück, selbst wenn der User bereits in das Feld getippt hat.

    Ich habe festgestellt, dass der MSIE vielfältig dieses Phänomen aufweist, wenn der auszulesende Wert zu *irgendeinem* Zeitpunkt (auch der Initialisierung) ein reiner Whitespace- oder ein Leer-String gewesen ist.

    Versuche einmal das ursprüngliche value-Attribut
    a) überhaupt anzugeben(!)
    b) mit einem `&nbsp;´ (oder bspw. einem Aufforderungstext) zu initialisieren

    Also statt bspw.:

    <input id="TextSearch" … /> oder <input id="TextSearch" value="" … />

    codierst du

    <input id="TextSearch" value="Bitte Suchtext eingeben …" … />

    Du musst auch dafür sorgen, dass `value´ zur Laufzeit Script-seitig nicht leer gesetzt wird, denn dann passiert das Gleiche.

    Ähnliches gilt meiner Auffassung nach im MSIE für *alle* (X)HTML-Elemente, auf deren Datenattribute (oder innerHTML) du mit DOM-Methoden zugreifen möchtest -- ich bin schon einmal dem Wahnsinn nahe gewesen, bevor ich dies per Zufall heraus gefunden habe … ;-)

    Gruß,
    Jörn

    1. Hallo Jörn,

      danke für den Tipp! Ähnliches hatte ich - leider vergeblich - auch versucht. Mit folgendem Workaround bin ich nun zu einer Lösung gekommen.

      <input id="TextSearch" onchange=onchange="document.getElementById('TextSearchValue').value = this.value" … />
      <input type="hidden" id="TextSearchValue" />

      Nun lässt sich auch im MSIE wahnwitzigerweise mittels $('TextSearchValue').value auf den korrekten Wert zugreifen....