curve: Focus auf Textfeld bei XHTML

hallo!

ich habe auf meiner startseite ein texteingabefeld, dass beim laden der seite automatisch aktiviert werden soll, damit man sofort seine suchanfrage eingeben kann (siehe google). als sprache verwende ich xhtml 1.0 strict. wenn ich nun anstatt dem alten "name" attribut des texteingabefeldes das benötigte "id" verwende, wird mein aufruf über "document.form.textfield.focus()" ignoriert. verwende ich "name" funktioniert es, ist aber kein valid xhtml mehr.

nun habe ich einfach mal nach gespür ;) das "id" attribut verwendet, und als js-befehl "this.form.textfield.focus()" und es klappt einwandfrei! dummerweise habe ich keine informationen auf den w3c-seiten gefunden (ist das ein wunder!?). habe ich mich nun um das eigentliche problem herumgemogelt oder ist das richtig so? warum geht this und document nicht?

danke für jeden tipp!

  1. Hallo,

    nun habe ich einfach mal nach gespür ;) das "id" attribut verwendet, und als js-befehl "this.form.textfield.focus()" und es klappt einwandfrei!

    Wo wurde hier eine ID verwendet? Ich sehe nur das Schluesselwort this zur Referenzierung des Objektes im aktuellen Kontext.

    dummerweise habe ich keine informationen auf den w3c-seiten gefunden (ist das ein wunder!?). habe ich mich nun um das eigentliche problem herumgemogelt oder ist das richtig so? warum geht this und document nicht?

    document.getElementById("eineID").focus() ist eine moegliche Technik.

    MfG, Thomas

    1. Wo wurde hier eine ID verwendet? Ich sehe nur das Schluesselwort this zur Referenzierung des Objektes im aktuellen Kontext.

      also mein element heisst <form ...irgendwas... id="dasFormular"> und das texteingabefeld <input ...irgendwas... name="eingabe">. würde beim formular name="dasFormular" stehen würde es zwar funktionieren, wäre aber nicht mehr valid.

      wir gehen nun davon aus dass das id-attribut verwendet wird. schreibe ich in eine funktion nun "document.dasFormular.eingabe.focus()" so passiert überhaupt nix. schreibe ich aber statt document this, als "this.dasFormular.eingabe.focus()" funktioniert es.

  2. Hi,

    als sprache verwende ich xhtml 1.0 strict.
    verwende ich "name" funktioniert es, ist aber kein valid xhtml mehr.

    Wie kommst Du darauf? Sowohl input als auch textarea haben in xhtml 1.0 strict ein name-Attribut.

    cu,
    Andreas

    --
    Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
    http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
    1. Wie kommst Du darauf? Sowohl input als auch textarea haben in xhtml 1.0 strict ein name-Attribut.

      cu,
      Andreas

      nö, haben sie nicht. "name" wurde durch "id" ersetzt. verwendet man "name" sagt einem der validator there is no attribute name.

      1. nö, haben sie nicht. "name" wurde durch "id" ersetzt. verwendet man "name" sagt einem der validator there is no attribute name.

        berichtigung:

        richtig, input und textarea haben name attribut. um an das input feld zu gelangen muss ich mich aber über das formular gehen, z.b. document.formular.input.function()

        für <form> wurde aber das name attribut durch id ersetzt und mit id funktioniert es nicht.

        1. hi,

          um an das input feld zu gelangen muss ich mich aber über das formular gehen, z.b. document.formular.input.function()

          wer sagt das?
          was spricht gegen einen zugriff auf ein input-feld über dessen ID? dazu brauchst du das formular doch gar nicht.

          gruss,
          wahsaga

          1. wer sagt das?
            was spricht gegen einen zugriff auf ein input-feld über dessen ID? dazu brauchst du das formular doch gar nicht.

            wie sieht das denn dann aus? ich habe es über die id versucht, z.b. eingabefeld.focus() aber das ging nicht.

            1. Hallo,

              wie sieht das denn dann aus? ich habe es über die id versucht, z.b. eingabefeld.focus() aber das ging nicht.

              Siehe [pref:t=58760&m=330049], also document.getElementById("feldID").focus()

              Außerdem bestehen u. a. diese Moeglichkeiten:
              document.forms[0].elements["feldname"].focus()
              document.forms[0].feldname.focus()

              Der forms[0] referenziert das erste Formularelement im Dokument.

              MfG, Thomas

              1. Siehe [pref:t=58760&m=330049], ...

                Sollte [pref:t=58760&m=329975] sein.

                MfG, Thomas

                1. Siehe [pref:t=58760&m=330049], ...

                  Sollte [pref:t=58760&m=329975] sein.

                  MfG, Thomas

                  ok, danke für die hilfe. ich werde es heute abend ausprobieren. aber meine frage ist noch nicht ganz beantwortet.

                  mit meiner schreibweise this.form.input.focus() funktioniert es ja auch. ist das nun ein hack oder auch korrekt?

                  1. Hallo,

                    mit meiner schreibweise this.form.input.focus() funktioniert es ja auch. ist das nun ein hack oder auch korrekt?

                    Das kommt auf den Kontext an. Innerhalb des Formulars funktioniert das, in einer uebergeordneten JS-Funktion aber nur, wenn die Referenz "this" uebergeben wird. Der Zugriff mittels getElementById() funktioniert dagegen im gesamten Dokument, unabhaengig von der aktuellen Position.

                    MfG, Thomas

                    1. ...getElementById() funktioniert dagegen im gesamten Dokument, unabhaengig von der aktuellen Position.

                      danke für die hilfe, aber es funktioniert nicht. ich verwende übrigens zum testen gerade den ie6.0 unter xp. werde es noch mit mozilla und safari testen, aber da eh die meisten nutzer ie haben ist es auch egal.
                      jedenfall funktioniert es auch mit getElementById() NICHT. es werden zwar keine fehler angezeigt, es passiert aber auch nichts =( ich bin 100% sicher dass egal ist ob ich die id selbst oder getElementById() verwende, denn der fehler liegt darin, dass ich "document" durch "this" ersetzen muss, wenn ich statt "name" nun "id" verwende. es ist einfach so. keine ahnung warum.
                      ich wundere mich nur dass das sonst noch keinem aufgefallen zu sein scheint!?

                      1. Hallo,

                        jedenfall funktioniert es auch mit getElementById() NICHT. es werden zwar keine fehler angezeigt, es passiert aber auch nichts =( ich bin 100% sicher dass egal ist ob ich die id selbst oder getElementById() verwende, denn der fehler liegt darin, dass ich "document" durch "this" ersetzen muss, wenn ich statt "name" nun "id" verwende. es ist einfach so. keine ahnung warum.

                        Das funktioniert problemlos (XHTML):

                        <form action="">
                        <input id="abc" type="text"/>
                        <input type="button" value="Klick mich" onclick="document.getElementById('abc').focus()"/>
                        </form>

                        MfG, Thomas

                        1. hallo thomas!

                          ich habe den funktionsaufruf über onload in das bodytag gesetzt. ich will dass beim laden der seite automatisch ein focus auf das texteingabefeld gesetzt wird damit man direkt schreiben kann (siehe google). deshalb braucht form eine id, da ich sonst nicht an input rankomme.

                          1. Hallo,

                            ich habe den funktionsaufruf über onload in das bodytag gesetzt. ich will dass beim laden der seite automatisch ein focus auf das texteingabefeld gesetzt wird damit man direkt schreiben kann (siehe google). deshalb braucht form eine id, da ich sonst nicht an input rankomme.

                            Nein, form braucht dazu keine ID:

                            <body onload="document.getElementById('inputID').focus()">

                            MfG, Thomas

                            1. ja, das funktioniert. aber dann muss ich meinem input-feld auch noch eine id geben, denn zur übertragung der eingabe nutze ich name. kann ich name und id gleichzeitig verwenden?

                              noch ne frage: warum geht document.getElementById('inputID').focus() aber nicht document.inputID.focus()???

                              1. Hallo,

                                ja, das funktioniert. aber dann muss ich meinem input-feld auch noch eine id geben, denn zur übertragung der eingabe nutze ich name. kann ich name und id gleichzeitig verwenden?

                                Du hast doch nun schon nahezu alle moeglichen Techniken genannt bekommen.

                                Dann nimm doch:
                                <body onload="document.forms[0].inputname.focus()">
                                oder
                                <body onload="document.forms[0].elements['inputname'].focus()">

                                noch ne frage: warum geht document.getElementById('inputID').focus() aber nicht document.inputID.focus()???

                                Weil ein Objekt mit dem Namen inputID offenbar nicht unterhalb vom document-Objekt vorkommt und zudem keine focus()-Methode kennt. Diese Schreibweise wird ueblicherweise aus Sicht des JS-DOM fuer Objekte mit name-Attribut werdendet, bei Bildern, Formularen und embedded Objekten.

                                Etwas wie document.all[inputID].focus() mag im IE funktionieren, sollte aber zugunsten von getElementById() aufgegeben werden.

                                MfG, Thomas

                                1. <body onload="document.forms[0].inputname.focus()">

                                  das funktioniert wunderprächtig, besten dank für die vielen antworten!