pixxma: Auswahlliste mit Verweiszielen

Moinsen,

halb geklaut und halb selbstgebastelt habe ich folgendes kleines JavaScript für eine Auswahlliste mit Verweiszielen (der Seitenbesucher soll aus der Auswahlliste ein Dokument anklicken können, welches sich dann im PDF-AddOn oder im externen Reader öffnet):

  
<!doctype html>  
<html lang="de">  
<head>  
   <meta charset="utf-8">  
   <title>Auswahlliste mit JavaScript</title>  
<!--JavaScript noch auslagern in eigene Datei -->  
<script>  
function auswahl (form)  {  
   var ausgewaehltereintrag=form.elements[0].selectedIndex  
      if (form.elements[0].options[ausgewaehltereintrag].value != "0")  {  
      window.open(form.elements[0].options[ausgewaehltereintrag].value,  
      target="_self");  
      }  
 }  
</script>  
</head>  
<body>  
   <p>  
      <form action="">  
         <select name="dokumentenliste" size="1" onChange="auswahl(this.form)">  
            <option selected value="0">Bitte Auswahl treffen:</option>  
            <option value="0">&nbsp;</option>  
            <option value="../dokumente/dokument1.pdf">Dokument 1</option>  
            <option value="../dokumente/dokument2.pdf">Dokument 2</option>  
            <option value="../dokumente/dokument3.pdf">Dokument 3</option>  
         </select>  
      </form>  
   </p>  
</body>  
</html>  

Irgendwo muss noch ein kleines Problem liegen, das mir nicht klar ist, denn:

1. Das „selected“ funktioniert meistens nur beim ersten Aufruf der Seite. Wenn ich vom aufgerufenen Dokument zurückgehe oder auch auf eine andere Seite gehe und dann zu dieser Seite zurückkomme, ist nicht mehr der erste Eintrag vorselektiert. Auch beim Browser-Aktualisieren stellt sich die Auswahlliste nicht mehr auf den vorselektierten Eintrag um.

2: Es passiert häufig, dass die komplette JavaScript-Funktionalität quasi verschwindet, nachdem ich ein paar Dokumente erfolgreich hintereinander aufgerufen habe. Es ist dann plötzlich gar kein Dokument mehr aufrufbar.

Achtung: Die beschriebenen Probleme tauchen im Firefox auf (Version 31, aber auch schon davor). Im IE 11 funktioniert bisher alles reibungslos.

Was kann ich verbessern?

MfG

pixxma

  1. hi,

    window.open(form.elements[0].options[ausgewaehltereintrag].value,
          target="_self");

    ^^^^^^^^^^^^^^

    Das wäre zu korrigieren, der zweite [optionale] Parameter ist ein Name fürs Fenster, sollte also ein String sein.

    MfG

    1. Hallo,

      window.open(form.elements[0].options[ausgewaehltereintrag].value,
            target="_self");
               ^^^^^^^^^^^^^^

      Das wäre zu korrigieren, der zweite [optionale] Parameter ist ein Name fürs Fenster, sollte also ein String sein.

      ist er doch auch, nämlich "_self". Dass dieser String zusätzlich einer Variablen namens target zugewiesen wird, tut nicht weh. Aber du hast schon recht: Es sieht aus, als ob pixxma nicht weiß, was er/sie da tut.

      Ciao,
       Martin

      --
      Zwischen Leber und Milz
      passt immer noch'n Pils.
      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
      1. Hallo,

        wenn man einem Ratsuchenden antwortet, wäre es schön, wenn man sich dabei nicht nebulös-allwissend gibt und bewußt fragmentarisch antwortet, sondern wenn man vielleicht einfach mal genau zeigt, wie der Code auszusehen hat und warum das so ist. Da könnte ich dann was von Lernen. Aus meinem Posting dürfte ja bereits hervorgegangen sein, dass ich kein JavaScript-Experte bin.

        MfG

        pixxma

        1. Hi,

          wenn man einem Ratsuchenden antwortet, wäre es schön, wenn man sich dabei nicht nebulös-allwissend gibt und bewußt fragmentarisch antwortet

          das war nie meine Absicht, und auch nach erneutem Lesen empfinde ich es nicht so.

          sondern wenn man vielleicht einfach mal genau zeigt, wie der Code auszusehen hat und warum das so ist.

          Nein, aber vielleicht umgekehrt: Erklären, warum das so ist, so dass du selbst verstehst, wie es aussehen muss.

          Aus meinem Posting dürfte ja bereits hervorgegangen sein, dass ich kein JavaScript-Experte bin.

          Nicht explizit, aber so genau hab ich's mir auch nicht angesehen. Aber wo liegt denn nun das Problem? Du verwendest die Methode [link:http://de.selfhtml.org/javascript/objekte/window.htm#open@title=window.open()]. Diese Methode erwartet, wie auf der verlinkten Doku-Seite nachzulesen ist, mindestens einen und bis zu drei Argumente.
          Als zweiten Parameter, also als Fensternamen, übergibst du den String "_self", der zur Liste der Fensternamen mit besonderer Bedeutung gehört. Warum du ihn gleichzeitig an eine Variable zuweist, ist mir nicht klar.
          Übrigens ist _self in diesem Fall IMO keine gute Idee - dann schließt man nämlich nach dem Lesen das PDF-Fenster und wundert sich dann, wo das ursprüngliche Dokument geblieben ist.

          Die beschriebenen Probleme mit der Auswahl des select-Elements dürften tatsächlich eher ein Browserproblem sein. Firefox scheint auch Formulareingaben in der History zu speichern und sie dann automatisch wiederherzustellen. Auch beim Reload ist er gern mal zickig und lädt eben nicht neu, sondern bloß wieder aus seinem Cache. Einschließlich des gespeicherten Zustands der Formularelemente.

          So long,
           Martin

          --
          Man soll den Tag nicht vor dem Abend loben.
          Und den Mann nicht vor dem Morgen.
            (alte Volksweisheit)
          Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
          1. Ok, target muss also weg bzw. ist überflüssig. - Ansonsten bin ich bei JavaScript halt generell unsicher, was die Syntax bzw. Zeichensetzung angeht. Wäre denn

            window.open(form.elements[0].options[ausgewaehltereintrag].value,'_self');

            eine korrekte Notation?

            Übrigens ist _self in diesem Fall IMO keine gute Idee - dann schließt man nämlich nach dem Lesen das PDF-Fenster und wundert sich dann, wo das ursprüngliche Dokument geblieben ist.

            Oder man lernt nach dem X-ten Wundern, den Zurück-Button seines Browsers zu benutzen;-) Ich persönlich finde es eigentlich überflüssig, einen zweiten Tab zu öffnen, aber kann auch gut mit _blank statt _self leben. Ist vielleicht auch nicht so wichtig.

            Die beschriebenen Probleme mit der Auswahl des select-Elements dürften tatsächlich eher ein Browserproblem sein. Firefox scheint auch Formulareingaben in der History zu speichern und sie dann automatisch wiederherzustellen. Auch beim Reload ist er gern mal zickig und lädt eben nicht neu, sondern bloß wieder aus seinem Cache. Einschließlich des gespeicherten Zustands der Formularelemente.

            Hm, doof, da kommt man ja ins Grübeln, ob eine Umsetzung mit CSS3 statt JavaScript nicht ergiebiger wäre ... Aber wenn der IE sich korrekt verhält, würde mir das in diesem speziellen Fall reichen, weil es um ein Intranet geht, das eh nur über IE's benutzt wird. Basteln und Testen tu ich aber immer auch mit FF.

            Danke

            pixxma