GraMan: Hypelink funktioniert nicht (document.all)

Hi Leute!

Ich habe ein blödes Problem mit einer Homepage. Ich arbeite mit iFrames und möchte nun mit einen Klick beide dieser Framse ändern. Soweit hab ich das ja schon geschaft, mit:

[head]
function loadframe()
{
document.all("iFrame1").src="page/html/content/frame1.htm"
document.all("iFrame2").src="page/html/content/frame2.htm"
}
[/head]

und dem Link:

[body]
[a href="javascript:loadframe()"]Frame[/a]
[body]

So weit funktioniert das auch. Mein Problem tritt erst dann auf, wenn der oben genannte Link bereits in einem iFrame ist und ich durch den Link beide Frames ändern will (also auch den Frame in dem ich den Link anklicke). Es funktioniert auch nicht, wenn ich nur den anderen Frame ändern will. Wisst ihr vielleicht an was das liegen kann? Er gibt mir übrigens auch immer folgende Fehlermeldung aus:

http://forum.geizhals.at/files/5383/javafehler.gif

  1. Wenn ich richtig verstanden habe hast du den Link in einem der Framefenster drin und clickst dann drauf.

    Dann kann das nicht gehen, weil document ja keine der Frames enthält.
    Du musst mit parent das übergeordnete Frame ansprechen.

    Siehe

    http://selfhtml.teamone.de/javascript/objekte/frames.htm#allgemeines

    1. Ja genau das Problem habe ich!

      Ich weiß nicht ob das jetzt unverschämt ist, aber könntest du mir den "Parent Code" mal schreiben? Ich kenn mich mit JavaScript wirklich nicht gut aus und war schon froh, dass ich das bis jetzt geschaft habe.
      Ich versuche zwar mal das Problem selbst zu lösen, aber ich habe nicht so viel Hoffnung ;-)

      Danke auf jeden Fall.

      1. Wenn es nicht unverschämt ist das ich sage "Nein"...
        Schau doch einfach mal kurz in die Ref, ich glaube an Dich! ;)

    2. Hey wahnsin ich habs glaube ich geschaft. Ich habe einfach ein "parent" vor document.all gesetzt und es hat funktioniert :-) Vielen Dank für deine Hilfe.

      1. hi,

        Hey wahnsin ich habs glaube ich geschaft. Ich habe einfach ein "parent" vor document.all gesetzt und es hat funktioniert :-)

        Schön für dich. Korrigiere jetzt bitte noch das mit dem "all" und korrigiere bitte unbedingt auch noch die Art, wie du deinen Link schreibst.

        Grüße aus Berlin

        Christoph S.

  2. morgens,

    document.all("iFrame1").src="page/html/content/frame1.htm"

    Dir ist klar, daß du "all" nicht mehr verwenden solltest, weil du damit sämtliche Leute, die einen ordentlichen Browser benutzen, aussperrst? "all" wird nur vom Internet Explorer verstanden, und daß und warum der "krank" ist, steht in vielen Beiträgen im Forumsarchiv.

    [a href="javascript:loadframe()"]Frame[/a]

    Dir ist klar, daß du auf gar keinen Fall
      a href="javascript:..."
    verwenden solltest? Korrekt wäre
     a href="#" onclick="loadframe()"
    Daß und warum das so ist, ist in vielen Beiträgen im Archiv nachzulesen.

    http://forum.geizhals.at/files/5383/javafehler.gif

    Du hast dir mit dem Screenshot immerhin Mühe gegeben. Aber es genügt in diesem Fall, die Fehlermeldung einfach so herzuschreiben (wir glaubens dir ja). Besser wärs gewesen, du hättest den link zu deiner fehlerhaften Framekonstruktion hier angegeben.

    Die Sache mit dem "zwei Frames ändern" gehört im übrigen zu den unbeliebtesten und am häufigsten gestellten und oft hohnlachend beantworteten Fragen hier im Forum. Es gibt mittlerweile ein paar tausend entsprechende Antworten dazu im Forumsarchiv, und in der Forums-FAQ gibt es auch eine (allerdings ist die nicht mehr ganz modern). Recherchiere im Forums-Archiv dazu.

    Grüße aus Berlin

    Christoph S.

    1. Hi!
      Ich Danke dir für deine schnelle Antwort. Wie du vielleicht gemerkt hast bin ich im scripten nicht so bewandert. Ich werde mir den Vorschlag mit "a href="#" onclick="loadframe()"" mal ansehen. Ich habe meinen JavaScript Code übrigens nicht im head Bereich von der HTML Seite, sondern lese in von einer Datei ein, was an der Sache aber wahscheinlich nichts ändern wir oder?

      Viele Grüße Graman.

      PS: Ich glaube ich hab das jetzt übrigens geschaft. (mit "parent")

      1. morgens,

        Ich habe meinen JavaScript Code übrigens nicht im head Bereich von der HTML Seite, sondern lese in von einer Datei ein, was an der Sache aber wahscheinlich nichts ändern wir oder?

        Das ist in der Tat wurscht. Es kommt allerdings drauf an, _wie_ du ihn einliest. Sobald ein Besucher deiner Seite auf den link klickt, soll er ja funktionieren, egal, welchen Browser er grade benutzt. Also muß in dem Moment, in dem mit der Maus geklickt wird, der Code dafür zur Verfügung stehen. Welchen Weg du dafür wählst, ist deine Entscheidung, und Code in eine externe Datei zu packen, ist _immer_ eine gute Idee, weil du diesen Code dann auch anderen Seiten zur Verfügung stellen kannst.

        PS: Ich glaube ich hab das jetzt übrigens geschaft. (mit "parent")

        Ich habs gelesen. Und ich bin nur deshalb nicht darauf eingegangen, weil der Hinweis bereits vorhanden war, ehe ich geschrieben habe. Der Hinweis ist korrekt.

        Grüße aus Berlin

        Christoph S.

        1. Ich kann nur sagen, dass das hier ein geiles Forum ist :-) Ich bin zum ersten Mal hier und mir konnte gleich geholfen werden. Vielen Dank nochmal. Ich bin mir sicher, dass ich durch soche kleinen Spielereien schneller lerne mit JS umzugehen und wenn ich dann noch jemanden habe, der mir gerne hilft, ist das wirklich fein!

          Grüße aus Wien!

          GraMan

    2. Hi Christoph,

      Dir ist klar, daß du auf gar keinen Fall
        a href="javascript:..."
      verwenden solltest? Korrekt wäre
       a href="#" onclick="loadframe()"

      findest Du diesen Tip nicht etwas sinnlos? Was soll einem Client ohne Javascript ein Link auf die aktuelle Seite denn bringen? Das macht für mich nun wirklich keinen Unterschied. Ich denke, wenn jemand schon Frames verwendet und hierbei mehrere auf einmal ändern will, sollte er ein neues Frameset hierzu anlegen. _Alternativ_ mag ein Javascript-Wechsel ja Sinn machen, dann aber in der Art:

      <a href="neuesFrameset.html" onclick="loadframe()"; return false;">

      freundliche Grüße
      Ingo

      1. Hi,

        <a href="neuesFrameset.html" onclick="loadframe()"; return false;">

        aber ohne das " nach () ;-)

        cu,
        Andreas

        --
        MudGuard? Siehe http://www.mud-guard.de/
      2. morgens,

        findest Du diesen Tip nicht etwas sinnlos?

        In diesem Fall nicht, weil GraMan offensichtlich am Beginn der Beschäftigung mit Javascript steht und wohl noch ganr nicht weiß, daß es Leute geben könnte, bei denen Javascript nicht funktioniert  -  also abgeschaltet ist.

        Wenns aber ums Prinzip geht, hast du vollkommen recht, mit dem Zusatz von Andreas.

        <a href="neuesFrameset.html" onclick="loadframe()" return false;>

        Ganz abgesehen davon würde ich "so eine" Aufgabe sowieso nicht mit Javascript, sondern mit irgendeiner serverseitigen Technologie zu lösen versuchen.

        Grüße aus Berlin

        Christoph S.

        1. Hi,

          findest Du diesen Tip nicht etwas sinnlos?

          In diesem Fall nicht, weil GraMan offensichtlich am Beginn der Beschäftigung mit Javascript steht und wohl noch ganr nicht weiß, daß es Leute geben könnte, bei denen Javascript nicht funktioniert  -  also abgeschaltet ist.

          nur daß "#" als Verweisziel gerade unter diesem Aspekt noch weniger Sinn macht als "javascript:".
          Denn wenn ich in der Statuszeile eine URI sehe, wird mir ein "echter" Link suggeriert,
          während "javascript:" in der Statuszeile mir deutlich sagt, daß ein Klick nichts bringt.

          Wenns aber ums Prinzip geht, hast du vollkommen recht, mit dem Zusatz von Andreas.

          tja... man sollte auch nicht so spät noch Code tippen..;-)

          freundliche Grüße
          Ingo

          1. pffffff,

            Wenns aber ums Prinzip geht, hast du vollkommen recht, mit dem Zusatz von Andreas.
            tja... man sollte auch nicht so spät noch Code tippen..;-)

            Herzl, wann ist etwas für dich "spät" und wann "früh" ? Du hast am 29. Januar um 05:24 Uhr was gepostet  -  für mich wäre dieser Zeitstempel tatsächlich "spät", aber du scheinst ihn als "früh" zu definieren. Hrrrrrm. Sollte man mal diskutieren ;-)

            Grüße aus Berlin

            Christoph S.

            1. Hi,

              Herzl, wann ist etwas für dich "spät" und wann "früh" ? Du hast am 29. Januar um 05:24 Uhr was gepostet  -  für mich wäre dieser Zeitstempel tatsächlich "spät", aber du scheinst ihn als "früh" zu definieren. Hrrrrrm. Sollte man mal diskutieren ;-)

              wieso? ich schrieb doch "spät". Aber ich seh' das immer ganz pragmatisch in Bezug auf vor'm zu Bett gehen und und nach dem Aufstehen..;-)

              freundliche Grüße
              Ingo