Avatar billede ethena Nybegynder
09. februar 2004 - 13:01 Der er 21 kommentarer og
1 løsning

Referere til element i Iframe via JavaScript

Hvordan bærer man sig ad med at refere til et element inde i en Iframe i en funktion (JavaScript), når man skal gå via en DIV i original-dokumentet?
Skal benytte SPAN'ens InnerHTML, der skal overføres til et andet SPAN's InnerHTML.

Original-dokument: (hoved.asp)
<FORM NAME="formAll">
  <DIV ID="d1">
    <IFRAME ID="fTrans">
    </IFRAME>
  </DIV>
  <SPAN TYPE="text" ID="s2">
    ... hertil skal indholdet overføres ....
  </SPAN>
</FORM>

Iframe-dokument: (trans.asp)
<FORM NAME="formTrans">
  <SPAN TYPE="text" ID="sTrans">
  ... indhold, der skal overføres ...
  </SPAN>
</FORM>
Avatar billede nute Nybegynder
09. februar 2004 - 13:33 #1
var objFrame = document.getElementById( "fTrans" ); // dette er din iframe
var objSpan  = objFrame.document.getElementById( "sTrans" ); // dette er dit span element

/nute
Avatar billede ethena Nybegynder
09. februar 2004 - 14:38 #2
hmm, virker ikke
Får følgende fejl:
  Objektet understøtter ikke denne egenskab eller metode
allerede ved den første linje :-(
Avatar billede nute Nybegynder
09. februar 2004 - 14:48 #3
ups ... undskyld ... prøv dette:

var objFrame = document.frames["fTrans"]; // din iframe
var objSpan = objFrame.document.getElementById("sTrans"); //dit span

/nute
Avatar billede ethena Nybegynder
09. februar 2004 - 15:01 #4
øhh, nu er det sidste linje, jeg får samme fejlmelding på :)
Avatar billede nute Nybegynder
09. februar 2004 - 15:05 #5
det fungere fint for mig.

hvilken fejl får du ?
Avatar billede ethena Nybegynder
09. februar 2004 - 15:11 #6
Fejl: Objektet understøtter ikke denne egenskab eller metode

hmmm, mystisk ...

hvis jeg skriver:
  var objSpan = objFrame.document.all("sTrans");
returneres 'undefined'
Avatar billede nute Nybegynder
09. februar 2004 - 15:14 #7
hvilken browser bruger du ?
Avatar billede ethena Nybegynder
09. februar 2004 - 15:18 #8
IE 6
Avatar billede nute Nybegynder
09. februar 2004 - 15:28 #9
jeg kører IE6 også ... dette fungerer fint for mig:

var objFrame = document.frames["fTrans"]; // din iframe
var objSpan = objFrame.document.getElementById("sTrans"); //dit span

det fungerer ikke i Mozilla, men ved at lægge ind en simple browsercheck, så kan det fungere:

var objApp = navigator.appName;
        var objFrame = null;
        var objSpan = null;
        if( objApp.indexOf( "Netscape" ) > -1 )
        {
            objFrame = document.getElementById( "fTrans" );
            objSpan = objFrame.contentDocument.getElementById("sTrans");
        }
        else if( objApp.indexOf( "Microsoft" ) > -1 )
        {
            objFrame = document.frames["fTrans"]
            objSpan = objFrame.document.getElementById("sTrans");
        }
        alert( objSpan.innerHTML );

/nute
Avatar billede ethena Nybegynder
10. februar 2004 - 09:33 #10
Det virker desværre ikke for mig .-(
Avatar billede nute Nybegynder
10. februar 2004 - 09:53 #11
hvis det ikke er altfor meget kode ... kan du poste hele HTML'en for både hoved.asp og trans.asp ? (altså den HTML du kopierer fra "vis kode" i din browser)

/nute
Avatar billede ethena Nybegynder
10. februar 2004 - 11:11 #12
trans.asp fylder ganske vist kun 77 linjer, men hoved.asp fylder 3258 linjers kode ... desuden benyttes et javaScript-dokument på 1632 linjers kode til bl.a. at overføre opl. fra et sted i hoveddok. til et andet sted i samme.

Det er nok lige i overkanten at poste :-p

Arbejder på en formular med så mange input-felter, at det overskrider grænsen for, hvormeget der kan overføres til en frame med post-metoden.
Avatar billede ethena Nybegynder
10. februar 2004 - 11:24 #13
HTML'en til trans.asp ser således ud, hvis den kopieres fra "vis kilde":

<HTML>
  <BODY>
      <FORM NAME="formTrans" METODE="post" ACTION="hoved.asp" TARGET="tekst">
      <SPAN TYPE="text" ID="sTrans" NAME="sTrans">
        <TABLE ALIGN="left" COLS="2">
            <COLGROUP ALIGN="left" CLASS="en">
            <TR>
              <TD><STRONG>Valgt transport&oslash;r:</STRONG></TD>
              <TD>Organisationsnavn</TD>
            </TR>
            <TR><TD>&nbsp;</TD>
              <TD>Vejnavn nummer</TD> 
            </TR>
            <TR><TD>&nbsp;</TD>
              <TD>4000 Roskilde</TD>
            </TR>
            <TR><TD>&nbsp;</TD>
              <TD>Tlf.nr.: 00000000</TD>
            </TR>
            <TR><TD>&nbsp;</TD>
              <TD>Kontaktperson: Fornavn Efternavn</TD>
            </TR> 
        </TABLE>
        <BR CLEAR="all">
      </SPAN>
      </FORM>
  </BODY>
</HTML>

men det er jeg bange for, ikke viser ret meget, idet oplysningerne er udtræk fra database via asp, - har en fornemmelse af, at det er der, problemet ligger begravet....
Avatar billede nute Nybegynder
10. februar 2004 - 11:31 #14
jeg forstår ikke hvorfor du har problemer ... jeg har laveet følgende 2 filer:

***********
index.html
***********

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
    <title>Untitled</title>
    <script language="JavaScript" type="text/javascript">
    <!--
    function test()
    {
        var objApp = navigator.appName;
        var objFrame = null;
        var objSpan = null;
        // Mozilla
        if( objApp.indexOf( "Netscape" ) > -1 )
        {
            objFrame = document.getElementById( "fTrans" );
            objSpan = objFrame.contentDocument.getElementById("sTrans");
        }
        else if( objApp.indexOf( "Microsoft" ) > -1 )
        {
            objFrame = document.frames["fTrans"]
            objSpan = objFrame.document.getElementById("sTrans");
        }
        document.getElementById( 's2' ).innerHTML = objSpan.innerHTML;
    }
    //-->
    </script>
</head>

<body>
<FORM NAME="formAll">
  <DIV ID="d1">
    <IFRAME name="fTrans" ID="fTrans" src="test.html">
    </IFRAME>
  </DIV>
  <SPAN TYPE="text" ID="s2">
  </SPAN>
  <input type="button" onclick="test();" value="Overfør fra frame">
</FORM>
</body>
</html>

*********
test.html (som er kopi af din kode)
*********
<HTML>
  <BODY>
      <FORM NAME="formTrans" METODE="post" ACTION="hoved.asp" TARGET="tekst">
      <SPAN TYPE="text" ID="sTrans" NAME="sTrans">
        <TABLE ALIGN="left" COLS="2">
            <COLGROUP ALIGN="left" CLASS="en">
            <TR>
              <TD><STRONG>Valgt transport&oslash;r:</STRONG></TD>
              <TD>Organisationsnavn</TD>
            </TR>
            <TR><TD>&nbsp;</TD>
              <TD>Vejnavn nummer</TD> 
            </TR>
            <TR><TD>&nbsp;</TD>
              <TD>4000 Roskilde</TD>
            </TR>
            <TR><TD>&nbsp;</TD>
              <TD>Tlf.nr.: 00000000</TD>
            </TR>
            <TR><TD>&nbsp;</TD>
              <TD>Kontaktperson: Fornavn Efternavn</TD>
            </TR> 
        </TABLE>
        <BR CLEAR="all">
      </SPAN>
      </FORM>
  </BODY>
</HTML>


hvis du kører dette, så vil du se at det fungerer.

/nute
Avatar billede ethena Nybegynder
10. februar 2004 - 11:41 #15
funktionen til overførsel af SPAN-indholdet ser p.t. således ud: (nænsomt forkortet !-)

function overforTrans(myDiv, mySpan)
{  var startPlac, slutPlac, indhold, objIframe, objSpan;
  startPlac = document.all(myDiv);
  objIframe = document.frames["fTrans"];
  objSpan = objIframe.document.getElementById("sTrans");
  slutPlac = document.all(mySpan);
  indhold = "";

  indhold += objSpan.innerHTML;
  slutPlac.innerHTML = indhold;
}

det er ved denne linje:
  objSpan = objIframe.document.getElementById("sTrans");
der kommer fejlmedding.
Avatar billede nute Nybegynder
10. februar 2004 - 11:46 #16
hvordan kalder du 'overforTrans' ... hvad er dine parametre ?

/nute
Avatar billede ethena Nybegynder
10. februar 2004 - 12:38 #17
<button OnClick="overforTrans('d1', 's2');">OK</button>

indeni d1 optræder et kontrolelement, der benyttes til at kontrollere, at der er blevet udvalgt en transportør, - denne del er fjernet fra overforTrans, da den ikke har relevans for problemstillingen.
Avatar billede nute Nybegynder
10. februar 2004 - 13:12 #18
sorry ... jeg fatter det ikke ... det fungerer fint for mig, også når jeg bruger din 'overforTrans' metode. Fejlen er nødt til at ligge et andet sted ...

du har ikke et link til siden, så det er muligt at se det hele ?
Avatar billede ethena Nybegynder
10. februar 2004 - 13:37 #19
oss mig - altså sorry :-p

Desværre ligger det ikke ude på nettet endnu .... kun på min maskinen
Hmm, måske er det IIS, der skaber problemet??
Avatar billede nute Nybegynder
10. februar 2004 - 13:53 #20
du har endnu ikke svaret mig på om mit eksempel fungerer. har du testet det jeg postet @ 10/02-2004 11:31:26 ??

/nute
Avatar billede ethena Nybegynder
11. februar 2004 - 10:49 #21
Bare rolig, - har ikke glemt dig :-p ... skulle bare lige ha' tid til at fejlsøge.

Nu er det endelig lykkedes, - resultatet ser således ud:

Original-dokument: (hoved.asp)
<FORM NAME="formAll">
  <DIV ID="d1">
    .....
    <IFRAME ID="fTrans">
    </IFRAME>
    <TEXTAREA ID="holdID" NAME="textTrans">Ingen</TEXTAREA></TD>
    <button OnClick="overforTrans('d1', 's2');">OK</button>
  </DIV>
  <SPAN TYPE="text" ID="s2">
    ... hertil skal indholdet overføres ....
  </SPAN>
</FORM>

Script-dokument:
function overforTrans(myDiv, mySpan)
{  var startPlac, slutPlac, indhold;
  startPlac = document.all(myDiv);
  var objFrame = null;
  var objSpan = null;
  objFrame = document.frames["fTrans"];
  slutPlac = document.all(mySpan);
  indhold = "";
  if (startPlac.all("holdID".innerText != "Ingen")
  { objSpan = objFrame.document.getElementById("sTrans");
    document.getElementById( 's2' ).innerHTML = objSpan.innerHTML;
  }
  else
  { indhold += "<TABLE<TR>";
    indhold += "<TD>Ingen transport&oslash;r valgt</TD>";
    indhold += "</TR></TABLE>";
    slutPlac.innerHTML = indhold;
  }
}

Har ikke heeeelt forstået, hvorfor jeg ikke kunne få det til at virke tidligere, men det gør det altså nu :)

Tak for kampen, - du har virkeligt fortjent dine point, så hvis du vil sende et 'svar' ....
Avatar billede nute Nybegynder
11. februar 2004 - 17:25 #22
det var da godt at høre !! kunne hellere ikke helt forstå hvorfor det ikke ville spille, meeeen .. .jeg har jo hellere ikke hele din kode, så det var litd svært :o]

*svar*

/nute
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester