Avatar billede speedpete Nybegynder
17. august 2006 - 15:21 Der er 11 kommentarer og
1 løsning

Forsinket div-popup mens siden fortsætter med postback

Jeg har en asp.net-side med en række checkboxes. Jeg har til hver checkbox knyttet et script som displayer en, ellers hidden, div, hvor der står "Vent - opdaterer" (For dem som måtte sidde ved et 28.8 modem eller lignende).

Nu vil jeg så gerne (for ikke at genere dem som har en hurtig forbindelse) have div'en til at vente ½ sekund med at vise sig, MEN siden skal vel at mærke: 1. begynde postback, 2. igangsætte timeren som skal vise div'en.

Jeg har prøvet noget a la:

function show div()
{
setTimeout("showtherealdiv",500);
}
function showtherealdiv()
{
// positioner og vis div'en her
}

... men det virker kun til en vis grænse, for jeg har nemlig brug for (pga. et problem med IE, div'er og dropdowns), at have en iframe til at følge med div'en, og det gør den ikke når jeg gør som ovenfor. Det virker iøvrigt fint hvis jeg bare gør således:

function show div()
{
// positioner og vis div'en her
}


Jeg har også prøvet at gøre således:

function show div()
{
var date = new Date();
var curDate = null;
do { var curDate = new Date(); }
while(curDate-date < 500);
// positioner og vis div'en her
}

, men så fryser hele siden i det angivne interval, og begynder så først derefter postbacken.

Nogle ideer?
Avatar billede roenving Novice
17. august 2006 - 16:30 #1
Måske setTimeout("showDiv()",500); ?-)
Avatar billede speedpete Nybegynder
18. august 2006 - 09:01 #2
ja, det har jeg også prøvet.... synes bare javascriptet brokkede sig. Men jeg kigger lige på det igen.
Avatar billede speedpete Nybegynder
23. august 2006 - 11:29 #3
Fandt dette hos Microsoft:

function fnHide(oToHide){
  window.setTimeout("fnHide2(" + oToHide.id + ")", 3000);
}
function fnHide2(sID){
  var o = eval(sID);
  o.style.display="none";
}
Avatar billede speedpete Nybegynder
23. august 2006 - 11:44 #4
... men det var vist heller ikke perfekt...
Avatar billede olebole Juniormester
23. august 2006 - 14:12 #5
<ole>

Nu er 'oToHide' formodentlig en streng (et HTML-elements ID kan som bekendt ikke være et tal) og så mangler du et par gåseøjne i din setTimeout. Desuden er din adressering i 'fnHide2' forkert. Prøv dette i stedet:

function fnHide(oToHide){
  window.setTimeout("fnHide2('" + oToHide.id + "')", 3000);
}
function fnHide2(sID){
  var o = document.getElementById(sID);
  o.style.display="none";
}

/mvh
</bole>
Avatar billede olebole Juniormester
23. august 2006 - 14:14 #6
*vrøvl*, olebole!  :D

'oToHide' er jo et objekt (et HTML-element). Prøv dette:

function fnHide(oToHide){
  window.setTimeout(function(){fnHide2(oToHide)}, 3000);
}
function fnHide2(o){
  o.style.display="none";
}
Avatar billede olebole Juniormester
23. august 2006 - 14:16 #7
- eller evt. blot:

function fnHide(oToHide){
  window.setTimeout(function(){oToHide.style.display="none"}, 3000);
}

Hvis der ikke skal ske andet i 'fnHide2', kan du ligeså godt undvære den  :)
Avatar billede speedpete Nybegynder
23. august 2006 - 16:10 #8
det vil jeg kigge på. så må jeg lige åbne for pointsne igen...
Avatar billede speedpete Nybegynder
23. august 2006 - 17:00 #9
Ok, jeg er helt blank.... Jeg kan sagtens få kaldt min funktion, men funktionen opfører sig anderledes, alt efter, om jeg kalder den med eller uden timout:

Funktionen er her:
var lastdiv;
function openLoadImageAfgraens()
{         
        var offsetLeft = 0;       
        var hde = document.getElementById("hentData");
        hde.style.top = "150px";
        hde.style.left = "400px";
        hde.style.visibility = "visible";
        var iframe= document.getElementById('iframeIEhack');
        if (lastdiv!=null)
        {
            lastdiv.style.display="none";
        }           
        if(navigator.appName=="Microsoft Internet Explorer")
        {
            iframe.style.height=hde.offsetHeight;
            iframe.style.width=hde.offsetWidth;
            var srcElement = event.target || event.srcElement
            iframe.style.top = "150px";   
            iframe.style.left = "400px";   
         
        } 
}

som det ses, viser den et ellers skjult billede, og hvis det er i IE, også en underliggende Iframe.

Hvis jeg kalder funktionen således:

CheckBox1.Attributes.Add("onclick", "openLoadImageAfgraens()");

så positioneres billedet og iFramen korrekt.

Gør jeg derimod således:

CheckBox1.Attributes.Add("onclick", "setTimeout('openLoadImageAfgraens()',2000);");

så går der fint nok to sekunder, hvorefter billedet vises hvor det skal, men iFramen vises øverst til ventsre?
Avatar billede roenving Novice
24. august 2006 - 00:35 #10
Hvorfor har du kun fat i iframen, hvis det er M$IE ?-)
Avatar billede speedpete Nybegynder
24. august 2006 - 09:08 #11
Fordi det kun er der, det er nødvendigt: Jeg vil vise DIV'en, men den skal visse steder ligge over en dropdown. IE smider dropdownen øverst, uanset z-index. Derfor må jeg have iframen bagved diven i IE.
Avatar billede speedpete Nybegynder
24. august 2006 - 10:29 #12
Ok, nu har jeg så løst det: problemet er denne linie (men aner ikke hvorfor):

var srcElement = event.target || event.srcElement;

Tager jeg den ud, virker det perfekt, både med og uden timeout
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