Vinzenz Mai: URI in spezifischem Parent-Frame öffnen

Beitrag lesen

Hallo,

Bevor ich mein Problem schildere möchte ich zunächst den Aufbau meiner Seite schildern:
Ich habe eine 2x2 Tabelle mit 4 iFrames f1,f2,f3 und f4.

das sind somit die Namen dieser IFrames.

In einer dieser iFrames möchte ich eine Lesezeichen-liste öffnen, mit der ich die URL einer per Radio-Box ausgewählten Frame ändere.

<form name="Fensterwahl">
    <input type="radio" name="Fenster" value="'f1'"> Fenster 1
    <input type="radio" name="Fenster" value="'f2'"> Fenster 2
    <input type="radio" name="Fenster" value="'f3'"> Fenster 3
    <input type="radio" name="Fenster" value="'f4'"> Fenster 4
</form>

Achtung: hier baust Du das erste Problem ein:

'f1'

ist nicht der gleiche Name wie

f1

Vom Grundsatz her [ref:self812;html/referenz/attribute.htm#id_idref_name@title=sind in Namen einfache Anführungszeichen nicht erlaubt].

Die vier von mir getesteten Browser (Firefox 10, IE 9, Opera 11.61 und der aktuelle Chrome haben diese Namen jedoch problemlos geschluckt - unter der Voraussetzung, dass auch die IFrames genauso hießen.

<td align="center"><img src="img/BILD.png" onclick="frames[parent.frames[document.radioWert(document.Fensterwahl.Fenster)].location.href='URL';"></td>

nein, so geht das nicht. Was soll document.radioWert() sein?

Rufen wir einfach beim onclick-Event die Funktion

showUriInSelectedFrame()

auf. Nun haben wir das Problem darauf reduziert, die Funktion zu schreiben, die die gewünschte URI im gewünschten Ziel-IFrame anzeigt :-)

Aufrufstelle:

[code lang=html]<td><img src="img/BILD.png" onclick="showUriInSelectedFrame();"></td>

  
Nun zur Funktion selbst:  
  
~~~javascript
function showUriInSelectedFrame() {  
    // Zunächst müssen wir den ausgewählten Radiobutton finden  
  
    // Da die Radiobuttons den gleichen Namen aufweisen, erhalten wir  
    // mit document.Fensterwahl.Fenster die Liste aller Radiobuttons  
    // mit dem Namen "Fenster" im Formular mit dem Namen "Fensterwahl"  
    var liste = document.Fensterwahl.Fenster;  
  
    // Wir deklarieren eine Variable für den Namen des Zielframes  
    var target;  
  
    // Um den ausgewählten Radiobutton zu finden, durchlaufen wir die  
    // Liste der Radiobuttons und prüfen für jeden Radiobutton, ob die  
    // Eigenschaft [ref:self812;javascript/objekte/elements.htm#checked@title=checked] gesetzt ist.  
    for (var i = 0; i < liste.[ref:self812;javascript/objekte/elements.htm#length@title=length]; i++) {  
        if(liste[i].checked) {  
            // Wir haben den ausgewählten Radiobutton gefunden  
            // Der Wert dieses Radiobuttons ist der Name des Zielframes  
            target = liste[i].[ref:self812;javascript/objekte/elements.htm#value@title=value];  
            // Da es nur einen geben kann, können wir gleich aufhören  
            [ref:self812;javascript/sprache/schleifen.htm#break_continue@title=break];  
        }  
    }  
  
    // Die Zieluri für den Zielframe  
    // Bitte durch die von Dir gewünschte ersetzen :-)  
    var uri = "http://localhost/selfforum/nick.php";  
  
    // Wenn ein Radiobutton ausgewählt ist  
    if (target) {  
        // lade die gewünschte Zielseite im gewünschten IFrame  
        // des Elterndokumentes  
        parent.frames[target].location.href = uri;  
    }  
    else  
        // Oops! Da hat jemand vergessen, den Zielframe auszuwählen  
        alert("Sie müssen einen Zielframe auswählen!");  
    }  
}

Nochmals die Knackpunkte:
  - Namen von Zielframe und Werte der Radiobuttons müssen exakt übereinstimmen
  - Elemente gleichen Namens sind eine Knotenliste und können wie ein Array angesprochen werden
  - Du musst diese Liste durchlaufen, um den ausgewählten Button zu finden,

Tipps:
  - Es ist sinnvoll, gültige Namen zu verwenden.
  - Es ist sinnvoll, veraltete Attribute wie align nicht mehr zu verwenden,
    sondern konsequent auf CSS zu setzen.
  - Der Verzicht auf Frames und IFrames ist in den meisten Fällen ein Gewinn.
  - Moderne Browser haben eine Fehlerkonsole, die sehr hilfreich sein kann.

Freundliche Grüße

Vinzenz