28. januar 2008 - 10:04Der er
15 kommentarer og 1 løsning
Huske - genbrug af var fra function ved reload af side
Jeg har et script som indeholder en function (visPanel(nr) og som skifter panel ved klik på kanpper. Ved onload starter den altid med nr=1 (se onload), MEN jeg vil gerne have den til at huske den sidste da jeg reloader siden automatisk 3 min.
Er der nogen det kan hjælpe med ændringen i mit script?
du kan bruge cookies til at gemme positionen i, men det er jo ikke alle der har det slået til. En anden mulighed ville være at bruge location.hash til det, dan kan du læse fra, og skrive til.
Det er egentlig ligemeget om den starter op med Panel 1, det vigtigste er at den husker den sidste. Det jeg har på siden er 4 tabeller som er defineret som div hver med et kald til en anden side, og det er denne side jeg skal have reloaded. så måske er alternativet i virkeligheden kun at reloade kaldet til den anden side. men det kan jeg slet ikke finde ud af. siden ser således ud:
<div id="panel9" class="panel"> <h1><font color="#336699">Her skal oversigten 9 være</font></h1> <p>siden "Dette er bare en bemarkning.......................</p>
</div>
</div> <br> <div id="footer"> <address> <a href="../faneblade.html"><b>PREPRESS</b></a> - <b>Preben Runge</b> - <a href="mailto:p.runge@mail.tele.dk"><b>pr@mail.tele.dk.dk</b></a> sidst opdateret: <%=NOW()%><br>Copyright <i>Preben Runge</i> </address> </div> <p id="nav"><font color="#336699"><marquee>Lige her og nu er der ialt:<font color="#ff0000"> <%=ialtkorr%></font> annoncer med korrektur rettelser og ialt:<font color="#ff0000"> <%=ialtejklar%></font> annoncer til produktion</marquee></font></p> </body>
lige nu bare en <META HTTP-EQUIV="REFRESH" CONTENT="120">, men jeg har også prøvet med et javascript (window.location.reload()).
det er hele siden der bliver reloaded - selv om det faktisk kun er det aktive panel der skal genindlæses. hver panel har en asp side der overvåger forskellige handlinger og det er disse handlinger der skal opdateres så længe det panelet er aktivt.
Læg en iframe i hver tabelcelle, hvor asp-dokumenterne inkluderes. Giv dem name="dynFrame_1" og lad nummeret svare til panelets nummer. I dine iframes loader du asp-dokumentet på denne form: src="asp_sider/kort_data.asp?kort=1" - og lad igen nummeret følge panelet.
Scriptet skriver du om til:
<script type="text/javascript"> var nInterval = 3; // reload interval i minutter var oTimer = oActFrame = null; function visPanel(nr) { skjulAlle(); resetColors(); expand('panel'+nr); setBgColor('tab' + nr,'#ff0000'); setBgColor('panel' + nr,'#fefefe'); setBorderBottomColor('tab'+nr,'#fefefe'); oActFrame = document.getElementsByName("dynFrame_"+nr)[0]; doReload(nr); } function doReload(nr) { clearTimeout(oTimer); oActFrame.location.reload(true); oTimer = setTimeout("doReload("+nr+")", nInterval*60000); } </script>
Det ser ikke ud til, indholdet er søgemaskine relevant - og koden ser ud til at være skrevet i en HTML-version, der understøtter iframes - så derfor er der ikke væsentlige bagdele ved brug af (i)frames. Ellers ville du kunne bruge Ajax, men det bliver straks en væsentlig mere kompleks løsning
Hej Olebole jeg har tilrettet siden og det eneste der IKKE virker er opdateringen af panelerne. Jeg får en fejl der hedder: 'oActFrame.location' is null or not a object.''
i din variabler skriver du i anden linie var oTimer=oactFrame=null; er denne linie korrekt ??? hvad kan ellers forsage fejlen ??
- er korrekt, hvis der staves korrekt: oActFrame ... med stort 'A'.
Der skal være 's' i getElementsByTagName. Metoden returnerer et array med det pågældende tagname, hvorfor det første element udvælges med det efterfølgende '[0]'.
Prøv at lægge et link, for jeg er sikker på, du laver en fejl et eller andet sted :)
<script type="text/javascript"> var nInterval = 1; // reload interval i minutter var oTimer = oActFrame = null; var ver3 = (navigator.appVersion.charAt(0) <= "3") ? true : false; var dom = (document.getElementById) ? true : false; var ie4 = (document.all && !document.getElementById) ? true : false; var ns4 = (document.layers) ? true : false; var ie5 = (document.all && document.getElementById) ? true : false; var n6 = (document.getElementById && !document.all) ? true : false;
function findObjekt(objekt) { var blok; if (dom) blok = document.getElementById(objekt).style; else if (ie4) blok = document.all[objekt].style; else if (ns4) blok = document.layers[objekt]; return blok; }
function setBgColor(objekt, color) { var blok = findObjekt(objekt); blok.backgroundColor = color; } function setFgColor(objekt,color) { var blok = findObjekt(objekt); blok.color = color; } function visObjekt(objekt){ var blok = findObjekt(objekt); blok.visibility = "visible"; } function skjulObjekt(objekt){ var blok = findObjekt(objekt); blok.visibility = "hidden"; } function expand(objekt){ var blok = findObjekt(objekt); blok.display="block" } function collapse(objekt){ var blok = findObjekt(objekt); blok.display="none" } function setBorderBottomColor(objekt,color){ var blok = findObjekt(objekt); blok.borderBottomColor = color; } function setBorderBottomWidth(objekt,width){ var blok = findObjekt(objekt); blok.borderBottomWidth = width; } function skjulAlle(){ for (i=1;i<10;i++) collapse('panel'+i) }
function resetColors(){ for (i=1;i<10;i++){ setBgColor('panel' + i,'#ccc'); setBgColor('tab' + i,'#369'); setBorderBottomColor('tab'+i,'#369'); } }
<div id="panel9" class="panel"> <h1><font color="#336699">Her skal oversigten 9 være</font></h1> <p>siden "Dette er bare en bemarkning.......................</p>
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.