19. juni 2008 - 19:58Der er
16 kommentarer og 1 løsning
Fejl i IE men ikke i FF
Hej!
Jeg har kodet noget javascript ud fra AJAX kontrollen ResizableControl og det virker super fint i Firefox og opera osv. men ikke i internet explorer.. Den kommer med en fejl " 'null' er null eller ikke et objekt ". Jeg har led tog ledt og prøvet dit og dat og jeg kan simpelthen ikke gennemskue det. Fejlen opstår når jeg prøver at kalde functionen på OnLoad i bodyen, altså <body onload="OnClientResize();"> scriptet virker sådan set også fint nok ellers, bare ikke på onload.
Håber i kan gennemskue det, her er koden.
<script type="text/javascript">
function OnClientResize () { if(document.getElementById('<%= checkProportioner.ClientID %>').checked == true) { var rcp = $find('ResizeImageBehavior'); var size = rcp.get_Size(); var txtWidth = document.getElementById('<%= txtWidth.ClientID %>'); var txtOldWidth = document.getElementById('<%= txtOldWidth.ClientID %>'); var txtHeight = document.getElementById('<%= txtHeight.ClientID %>'); var txtOldHeight = document.getElementById('<%= txtOldHeight.ClientID %>');
Hmm. Så har den måske alligevel ikke nået at lave alle de rette elementer, som funktionen skal bruge, selvom den køres onload. Hvad hvis du retter til:
Jeg kan ikke forestille mig, hvad det ellers skulle være, hvis det virker alle andre steder end onload. Kunne vel muligvis skyldes, at noget JavaScript mangler at oprette et element eller så.
Hvad er indholdet af funktionen '$find'? Bevares, der burde ikke være en funktion med begyndelsesbogstavet '$' - men da man nu har valgt den konstruktion, så bør vi nok se den, da der jo kunne være noget i den, som konflikter med IE.
Ligger der noget brugbart i de forskellige ASP-variabler? Ellers _skal_ fejlen jo opstå. Man kunne forestille sig, de kommer et sted fra, hvor værdien ikke bliver sat i IE - ikke mindst, hvis de fremkommer på baggrund af et Ajax-kald.
Hej tak for de hurtige svar! setTimeout('OnClientResize()',1000); løser ikke problemet. $find('ResizeImageBehavior') er en fuktion der finder denne kontrol <cc1:ResizableControlExtender ID="ResizeImageControl" runat="server" BehaviorID="ResizeImageBehavior" TargetControlID="ResizeImageDiv" HandleCssClass="resizeBoxHandle" ResizableCssClass="resizeBox" MinimumHeight="10" MinimumWidth="10" HandleOffsetX="3" HandleOffsetY="3" />
Jeg kan desværre ikke vise det online da det ligger på en lukket server. Øhmm så det er ikke muligt, men hvis i vil se mere kode så bare sig til.
Jeg tror muligvis fejlen ligger i if(document.getElementById('<%= checkProportioner.ClientID %>').checked == true) fordi jeg satte koden ind i Masteren og der kom den med en fejl om at CheckBoxen ikke kunne findes og det er vel rigtig nok hvis koden bliver kørt før CheckBoxen er blevet oprettet. Så jeg skal på en eller anden måde få kaldt function når siden er loadet men først efter CheckBoxen er blevet oprrettet. Deter i hvert fald det som jeg tror der kunne være fejlen... Andre forslag?
Jeg mener, Roenving engang kom frem til, at alle timeouts under ca. 33 bliver tolket som 33 alligevel. Det er den nedre grænse for, hvor lille et timeout må være.
Jeg gætter bare: det er ikke længden af den timeout, der betyder noget, men blot at den er der, for det bevirker at den bliver sat bagefter det andet, der skal gøres først.
Og en dag spørgeren har god tid, kunne det måske være smart at strikke koden sammen på en måde, så det slet ikke er nødvendigt. :)
Hvis det at spørgeren får godt tid skulle falde sammen med en mere substantiel opdatering af visse browsere, vil der være en god chance for, timeout'en kan undværes. Desværre er det også min erfaring, at det - trods udfoldelse af stor kreativitet - er nødvendigt at give browseren et pusterum til rendering.
At et element er oprettet, er desværre ikke altid ensbetydende med, det kan tilgås i næste øjeblik. Om der så står 1 eller 33 i timeout'en er somregel uden betydning. Så vidt jeg ved, er der ikke nogen officiel grænse for, hvor kort en timeout må være ... men det er et heftigt diskussionsemne i mange fora. Det veksler fra PC til PC, men det ligger nok i området 20-40 msek =)
På et tidspunkt skal jeg nok ha lavet det smartere, men det vigtigste er at det virker og 1000 tak for det :)
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.