Avatar billede sw_red_6 Nybegynder
21. november 2008 - 14:30 Der 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
Avatar billede sw_red_6 Nybegynder
21. november 2008 - 15:02 #1
Argh!

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...
Avatar billede w13 Novice
21. november 2008 - 18:09 #2
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. =)
Avatar billede w13 Novice
21. november 2008 - 18:10 #3
Og du kan ikke lægge siden ud et sted, hvor der ikke skal bruges password? :)
Avatar billede w13 Novice
21. november 2008 - 18:10 #4
I øvrigt skal:

onclick="htm();window.location.href=Course_Show.asp?CourseID=0"

selvfølgelig være:

onclick="htm();window.location.href='Course_Show.asp?CourseID=0'"

Men det er nok bare en skrivefejl. =)
Avatar billede w13 Novice
21. november 2008 - 18:11 #5
(Bemærk at jeg også skriver window foran location, da den så ikke skal søge object scopet igennem ligeså længe. =)
Avatar billede sw_red_6 Nybegynder
21. november 2008 - 19:38 #6
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..
Avatar billede roenving Novice
22. november 2008 - 17:37 #7
quirksmode ?-)

-- 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 ...
Avatar billede olebole Juniormester
23. november 2008 - 13:12 #8
<ole>

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  =)

/mvh
</bole>
Avatar billede sw_red_6 Nybegynder
24. november 2008 - 08:56 #9
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)
Avatar billede olebole Juniormester
24. november 2008 - 10:52 #10
"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
Avatar billede sw_red_6 Nybegynder
24. november 2008 - 11:44 #11
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
Avatar billede sw_red_6 Nybegynder
24. november 2008 - 12:39 #12
Der mangler nogle billeder hist og her men i kan se siden her: http://evaluer.dk/eksperten/ekspert853649.asp
Avatar billede olebole Juniormester
24. november 2008 - 15:04 #13
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)
Avatar billede sw_red_6 Nybegynder
24. november 2008 - 15:45 #14
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
Avatar billede olebole Juniormester
24. november 2008 - 16:00 #15
Du må prøve at debugge request-objektet med en alert og se, hvad der sker i de forskellige faser af request'en
Avatar billede sw_red_6 Nybegynder
24. november 2008 - 16:46 #16
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
Avatar billede sw_red_6 Nybegynder
26. november 2008 - 12:17 #17
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
Avatar billede olebole Juniormester
26. november 2008 - 12:51 #18
Hmmm ... ser det virkelig rigtigt ud i FF?

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  =)
Avatar billede sw_red_6 Nybegynder
13. august 2009 - 16:42 #19
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
Avatar billede olebole Juniormester
13. august 2009 - 22:22 #20
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.
Avatar billede olebole Juniormester
13. august 2009 - 22:24 #21
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
Avatar billede sw_red_6 Nybegynder
14. august 2009 - 09:17 #22
hmm, det lyder faktisk ret interessant.
Det skal jeg bestemt have kigget lidt nærmere på, tak

Så mangler vi lige en tilbagemelding fra roenving..
Avatar billede roenving Novice
14. august 2009 - 13:56 #23
Tilbagemelding ?-)

Hvis det handler om point, må jeg nok sige: Nej tak, ellers tak !-)
Avatar billede olebole Juniormester
18. august 2009 - 00:11 #24
Tak for points  =)
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