17. august 2006 - 15:21Der 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.
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
function fnHide(oToHide){ window.setTimeout("fnHide2(" + oToHide.id + ")", 3000); } function fnHide2(sID){ var o = eval(sID); o.style.display="none"; }
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"; }
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.
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.
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
Synes godt om
Ny brugerNybegynder
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.