21. november 2008 - 14:30Der er
23 kommentarer og 1 løsning
Tilføjelse af event som skal køre funktioner, hvordan?
Jeg opretter en række af <div> som hver skal have tilføjet disse events: onMouseOver="this.style.background='#CBD646';stm(M[1234],S[0])" onMouseOut="this.style.background='#0F0';htm()" onclick="htm();location.href=Course_Show.asp?CourseID=0"
Jeg ved at jeg skal addEventListener og attachEvent afhængig af browser, men hvordan skal den kode se ud?
stm er en funktion som for en tekst(M) og en style-streng(S) og tilføjer en div. htm er en funktion som fjerner den div som stm har tilføjet
Har lige tjekket i IE7, uden de events, og den viser slet ikke de elementer jeg har oprettet! Siden er i quirks mode, men det skulle da stadig virke.. Jeg kan sagtens se elementerne i FF og jeg får ingen js-fejl, hverken i IE7 eller FF. Jeg kan indsætte JS-koden, men det er ikke muligt at vise siden eftersom der skal bruges password for at komme ind...
Du behøver vel kun addEventListener, hvis du vil tilføje til allerede eksisterende funktioner. Hvis du bare vil overskrive/oprette en onmouseover fx., så brug bare:
oElementet.onmouseover = function(){ blabla };
Det skulle ikke være noget problem.
Husk i øvrigt, at eventhandler-attributters navne altid skrives med småt. "onMouseOver" er derfor forkert, især hvis du en dag vil skrive din kode om til XHTML. =)
Skulle måske have skrevet at de er dynamisk oprettet med document.createElement, så der er ikke nogen events som kan/skal ændres..
jeg skal også bruge attachEvent eftersom nogle af brugerne stadig har IE 6, er det ikke forkert at bruge "oElementet.onmouseover = function(){ blabla };" ifølge standarden, mener jeg at have læst et sted..?
og den onclick er en skrivefejl, som du selv siger, det er kun en eksempel URL.. Den window. skal jeg huske, det er vidst ikke det eneste sted det skal tilføjes..
Tilføjelse til min første kommentar: Elementerne er der, men de er ikke synlige. Jeg kan godt se dem hvis jeg trykker "vis udskrift", men de er med sort tekst og hvid baggrund, selvom det skulle være gul baggrund..
-- hvadfor finder du på bevidst at 'gå over for rødt' ?o]
-- men hvis du bruger en transitional doctype (eller vælger at skide på standarderne, rekommendationerne og browserkompatibiliteten !-), så er det dog helt håbløst tåbeligt at efterfølge nogetsomhelst standard-ting, når lige-ud-af-landevejen-tingen virker ...
-- sådan noget i retning af at bekymre sig om der er lys på den cykel, du har stjålet ...
Det virker afgjort, somom du laver fejl andre steder. Under alle omstændigheder vil dette udvikle sig til en laaaaaang, kedelig quiz, hvis du ikke lægger eksemplet et sted, vi andre kan se det =)
roenving>> jaja, men det er ikke mig der har startet det og hvis jeg ændrer på DOCTYPE deklarationen skal ALT laves om og det er der ikke afsat tid til.. Desuden har jeg forsøgt at gøre det, men det hjalp ikke på problemet med visningen i IE7
olebole>> Det skulle ikke undre mig hvis det var tilfældet, men lige nu udvider jeg kun på det eksisterende så... Jeg kan give kildekoden hvis det skulle være, men det vil muligvis ikke hjælpe stort da det jeg spørger om bliver skrevet med data hente via AJ..(ingen XML, og ingen HTML)
"hvis jeg ændrer på DOCTYPE deklarationen skal ALT laves om og det er der ikke afsat tid til.." >> Er der ikke afsat tid nok til at løse opgaven ordentligt, skal der jo ændres på tidsestimatet.
Hvis ikke jeg kan se siden, kan jeg ikke få øje på, hvordan jeg eller andre kan hjælpe
Det kan jeg kun give dig ret i, men det er lavet i asp (den gamle!) og skal skrives om til PHP på et tidspunkt og der bliver det gjort ordentligt(og i ser mig sikkert herinde med en del spørgsmål ;o| ), men indtil da skal der ikke laves alt for store ændringer...
Jeg skal se om det kan lade sig gøre at ligge siden ud, med noget fiktiv data
Hvorfor i alverden har du ikke omtalt de JavaScript fejl, både IE og FF banker af? Du har under alle omstændigheder noget vrøvl med din Ajax. Denne linje (linje 729) fejler i hvertfald: document.getElementById("moContent").innerHTML=request.responseText;
Derudover orker jeg ikke at sidde og pløje syv JS-filer igennem for at finde dine fejl - men du skulle vel også selv kunne nå langt, hvis du gider at teste selv (hvilket også indebærer at forholde sig til browsernes fejlmeldinger)
Beklager, fik en anden opgave så jeg fik ikke tjekke det hele igennem, men det virker nu.. som beskrevet altså :o(
Desuden burde der ikke være noget galt med de js-filer, de bliver brugt flere andre steder uden at det giver nogen problemer.. og det er på sider som minder lidt om denne
i forbindelse med? hvis det er det her: document.getElementById "moContent").innerHTML=request.responseText; så fik du den fejl fordi den ikke havde nogen fil at hente data fra..
nu har jeg sat en alert ind som skriver readyState, responseText, getAllResponseHeaders og status
Jeg har lige tilføjet en tbody og nu bliver elementerne i det mindste vist, men ikke som det var meningen.. og det er stadig kun i IE det ikke virker rigtigt
Når du bruger den DTD, du gør, disabler du store og meget vigtige dele af CSS i IE - måske, det kan være en forklaring. Brug i stedet: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- og så kan _alt_ jo altså ske, når man bruger innerHTML =)
Jeg ved at innerHTML er noget skidt. Problemet er bare at vi flere gange har oplevet at hvis elementerne skal oprettes vha. DOM/JS så tager det en krig før siden er færdig med at loade..
Det egentlige spørgmål er blevet løst, og en hel del af tingene er lavet om igen, igen så jeg kan desværre ikke vise løsningen her..
Hvis i kommer med nogle svar så vil jeg lukke spørgsmålet
Det lyder absolut, som om du bruger DOM uhensigtsmæssigt. Du indsætter sikkert ét element ad gangen i et container element. Dét tager tid! ;o)
I stedet opretter du et dokument fragment - sætter elementer ind i dét - og sætter fragmentet ind i sidens DOM træ:
var o, oFrg = document.createDocumentFragment(); for (var i=0; i<1000; i++) { o = document.crateElement("div"); o.appendChild(document.createTextNode("Div nummer "+i)); oFrg.appendChild(o); } document.getElementById("ditDiv").appendChild(oFrg);
Du kan også bruge et hvilket som helst andet element - blot du indsætter alle childnodes, mens elementet ligger i hukommelsen og først sætter det ind til sidst. Derved renderes kun én gang - i stedet for én gang pr. element.
Elementet documentFragment er en slags 'letopløseligt' container element. Når fragmentet er indsat, ophører det med at eksistere. Det eksisterer kun med det formål at opbevare elementer, mens de ligger i hukommelsen.
I 'gamle dage' var der hukommelses problemer med den fremgangsmåde, men det er længe siden, MS udsendte en opdatering til IE6, som fiksede dette problem
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.