Alex: Auswahlliste als Verweisliste ohne Javascript?

Hallo,
ich weiß aus Selfhtml, wie man ein Auswahlmenu als Navigationselement verwenden kann - mit Javascript, damit die Auswahl direkt die gewünschte URI aufruft. Wenn ein Benutzer aber Javascript ausgeschaltet hat sieht's schlecht aus, außer es läuft so wie bei http://www.Heise.de. Da wird dann automatisch ein submit-Button eingeblendet. So ist der Quelltext:

<form NAME="myform" ACTION="/bin/callurl">
 <input TYPE="hidden" NAME="1" VALUE="http://www.heise.de">
 <select NAME="2"
 onChange="sef.location=this.options[this.selectedIndex].value; return true;">
 <option value="" selected>Suchen nach...</option>
 <option value="/newsticker/">News</option>
 <option value="/ct/inhverz/search.shtml">c't-Artikeln</option>
 <option value="/ix/iXInhalt/search.shtml">iX-Artikeln</option>
 [...]
 <option value="/stema/">Jobs</option>
 </select>
 <noscript>
 <input type="submit" name="test" value=" Go ">
 </noscript>
 </form>

Ich verstehe aber nicht, wie die es machen: vermutlich wird unter /bin/callurl serverseitig irgendwie die korrekte URL ausgewählt.
Wie geht das? Geht das auch mit PHP?
Kennt jemand vielleicht einen Artikel/Beitrag o.ä., wo das genauer beschrieben wird?

Danke,
Alex

  1. Hallo Alex,

    Wie geht das? Geht das auch mit PHP?

    Klar. Beispiel:

    <form name="myform" action="/redirect.php" method="get">
     <select name="wohin" onChange="sef.location=this.options[this.selectedIndex].value; return true;">
     <option value="" selected>Gehe zu...</option>
     <option value="/adresse1">Adresse1</option>
     [...]
     <option value="/adresse2">Adresse2</option>
     </select>
     <noscript>
     <input type="submit" value=" Go ">
     </noscript>
    </form>

    Dann wird nach der Auswahl von Adresse1 und dem Aktivieren von »Go« das Script /redirect.php?wohin=/adresse1 aufgerufen. Das kann dan den Paramter wohin auslesen und daraufhin eine HTTP-Weiterleitung durchführen.

    Beachte aber, dass eine gültige HTTP-Weiterleitung eine _absolute_ URI ist, d.h. mit http://... - Header ('Location: /adresse1'); ist nicht erlaubt - die Tatsache, dass viele Browser es trotzdem interpretieren macht es nicht richtiger, es gibt Browser, die interpretieren das nicht.

    Christian

    --
    Hast Du einen Beitrag? Nur her damit!
    http://aktuell.de.selfhtml.org/tippstricks/beitrag.htm
    SELF-Code: (http://emmanuel.dammerer.at/selfcode.html)
    sh:) fo:) ch:] rl:( br:> n4:& ie:% mo:) va:) de:] zu:) fl:( js:| ss:) ls:[
    1. Hallo,

      <select name="wohin" onChange="self.location=this.options[this.selectedIndex].value; return true;">

      Opera und MSIE feuern den Event, wenn die Auswahlliste mit Nach unten- beziehungsweise Nach oben-Tasten durchgeschaltet wird. Sofern vorher nicht Alt plus Nach unten gedrückt wird, ist das Eingabefeld somit über die Tastatur nicht bedienbar. Beim Durchschalten mit der Tastatur im Screenreader geht es interessanterweise problemlos, da die Auswahl explizit mit Return/Enter bestätigt werden muss.
      Das nur als Anmerkung. Leider waren meine Versuche mit onclick bei option erfolglos.

      Grüße,
      Mathias

      1. Hallo,

        <select name="wohin" onChange="self.location=this.options[this.selectedIndex].value; return true;">

        Opera und MSIE feuern den Event, wenn die Auswahlliste mit Nach unten- beziehungsweise Nach oben-Tasten durchgeschaltet wird. Sofern vorher nicht Alt plus Nach unten gedrückt wird, ist das Eingabefeld somit über die Tastatur nicht bedienbar. Beim Durchschalten mit der Tastatur im Screenreader geht es interessanterweise problemlos, da die Auswahl explizit mit Return/Enter bestätigt werden muss.
        Das nur als Anmerkung. Leider waren meine Versuche mit onclick bei option erfolglos.

        onblur ist dann vielleicht angebrachter (aber nicht wirklich schön) oder eben einfach einen SubmitButton nebendran machen, wie es sich gehört ;-)

        Struppi.

  2. Hallo Alex,

    Ich verstehe aber nicht, wie die es machen: vermutlich wird unter /bin/callurl serverseitig irgendwie die korrekte URL ausgewählt.

    Richtig.

    Wie geht das? Geht das auch mit PHP?
    Kennt jemand vielleicht einen Artikel/Beitrag o.ä., wo das genauer beschrieben wird?

    Ja, schau dir dazu mal die Funktion header an, speziell den Teil mit Location: http://www.php.net/manual/de/function.header.php.

    Grüße aus Darmstadt,
    Benjamin

    --
    http://aktuell.de.selfhtml.org/tippstricks/beitrag.htm
    SELF-Code: sh:) fo:) ch:} rl:| br:> n4:( ie:% mo:) va:) de:> zu:) fl:| ss:) ls[