{"id":142,"date":"2008-05-08T19:39:14","date_gmt":"2008-05-08T18:39:14","guid":{"rendered":"http:\/\/www.nielsgamborg.dk\/wordpress\/webudvikling\/event-objektet-i-internet-explorer-og-firefox.htm"},"modified":"2008-05-08T19:39:14","modified_gmt":"2008-05-08T18:39:14","slug":"event-objektet-i-internet-explorer-og-firefox","status":"publish","type":"post","link":"https:\/\/nielsgamborg.dk\/wordpress\/browser_bugs\/event-objektet-i-internet-explorer-og-firefox.htm","title":{"rendered":"Event objektet i Internet Explorer og Firefox"},"content":{"rendered":"<p>Sad p\u00e5 Statsbiblioteket og skulle lave en logging funktion til\u00a0den nye s\u00f8gemaskine Summa. Vi har allerede\u00a0flere logging funktioner tilknyttet Summa, men nu skulle vi bruge noget der kunne logge alle klik p\u00e5 links med AJAX funktionerne. Problemet med at logge links,\u00a0 der udf\u00f8rer AJAX kald, er at siden\u00a0ikke skiftes\/opdateres 100%, men kun opdateres lokalt.<!--more--><\/p>\n<h3>event.srcElement\u00a0i Internet Explorer<\/h3>\n<p>L\u00f8sningen er\u00a0<strong>event.srcElement<\/strong>, der kan l\u00e6se onclick events i JavaScript.\u00a0 Det smarte ved funktionen er at den kan afl\u00e6se alle attributterne i det tag du knytter den til.<\/p>\n<p>F.eks. vil\u00a0 event.srcElement.href\u00a0returnere hvilken link, der henvises til og event.srcElement.onclick vil fort\u00e6lle hvilke onclick events, der er tilknyttet tagget.\u00a0<\/p>\n<h3>event.target i Firefox<\/h3>\n<p>Desv\u00e6rre \u00a0findes event objektet desv\u00e6rre\u00a0\u00a0i 2 forskellige udgaver. Funktionaliten er ikke helt ens for Firefox og Explorer event objektet, men til basale funktioner, som f.eks. at afl\u00e6se onclick, onmouseover eller onmouseout events, har forskellen ingen praktisk betydning.<\/p>\n<p>I\u00a0Firefox bruges syntaksen:<\/p>\n<blockquote><p>event.target<\/p><\/blockquote>\n<h3>En crossbrowser l\u00f8sning<\/h3>\n<p>Men nok snak.\u00a0 Lad os kigge p\u00e5 noget kode, der virker med begge browsere (faktisk virker det ogs\u00e5 med Safari. (Safarai har nemlig sin helt egen s\u00e6rhed p\u00e5 event objektet) :<\/p>\n<blockquote><p>\u00a0function log(e) {<\/p>\n<p>\/\/Ops\u00e6tning af event.srcElemenet\/event.target objekt i henh. IE og Firefox<br \/>\nvar targ;<br \/>\n\u00a0if (!e) var e = window.event;<br \/>\n\u00a0if (e.target) targ = e.target;<br \/>\n\u00a0else if (e.srcElement) targ = e.srcElement;<br \/>\n\u00a0if (targ.nodeType == 3) \/\/ defeat Safari bug<br \/>\n\u00a0\u00a0targ = targ.parentNode;<\/p>\n<p>\u00a0\/\/Indsamling af data<br \/>\n\u00a0var id\u00a0\u00a0=\u00a0 targ.id;<br \/>\n\u00a0var href\u00a0\u00a0=\u00a0 targ.href;<br \/>\n\u00a0var onclick\u00a0\u00a0=\u00a0 targ.onclick;<br \/>\n\u00a0var data\u00a0=\u00a0 &#8220;onclick: &#8221; + onclick + &#8220;\\n\\nID: &#8221; + id + &#8220;\\n\\nhref: &#8221; + href;<\/p>\n<p>\u00a0\/\/Tiden med dato objektet<br \/>\n\u00a0var now\u00a0\u00a0= \u00a0new Date();<br \/>\n\u00a0var hour\u00a0\u00a0\u00a0=\u00a0 now.getHours();<br \/>\n\u00a0var minute\u00a0\u00a0=\u00a0 now.getMinutes();<br \/>\n\u00a0var second\u00a0\u00a0=\u00a0 now.getSeconds();<br \/>\n\u00a0var monthnumber =\u00a0 now.getMonth() + 1;<br \/>\n\u00a0var monthday\u00a0 =\u00a0 now.getDate();<br \/>\n\u00a0var year\u00a0=\u00a0 now.getFullYear();<\/p>\n<p>\u00a0\/\/Tidsformateringer<br \/>\n\u00a0var tidspunkt =\u00a0 monthday + &#8220;-&#8221; + monthnumber + &#8220;-&#8221; + year + &#8221; &#8221; + hour +&#8221;:&#8221; + minute + &#8220;:&#8221; + second + &#8220;\\n\\n&#8221;;<\/p>\n<p>\u00a0\/\/Tjek af data med en alert\u00a0<br \/>\nalert(tidspunkt + data);<\/p>\n<p><span style=\"color: #008080;\">\/\/overf\u00f8rsel til serveren via <strong>prototype<\/strong> Ajax.Request<br \/>\n\/\/ du <strong>skal<\/strong> alts\u00e5 have adgang til <strong>Prototype.js<\/strong> fra filen for at denne del virker<\/span><span style=\"color: #008080;\"><br \/>\nnew Ajax.Request(&#8216;globals\/jsp\/log.jsp&#8217;, {<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0method: &#8216;get&#8217;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0parameters:{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0data1: tidspunkt + data}<br \/>\n\u00a0\u00a0\u00a0 });<\/span><\/p>\n<p>}<\/p><\/blockquote>\n<p><strong>Vigtigt!<\/strong> N\u00e5r du kalder funktionen skal du sende parameteren &#8220;event&#8221; med ellers virker det ikke i Firefox. Funktionskaldet skal alts\u00e5 se s\u00e5dan ud:<\/p>\n<blockquote><p>onclick=&#8221;log(event)&#8221;<\/p><\/blockquote>\n<p>Microsoft kan ikke se den medf\u00f8lgende event parameter, og vil derfor ignorere den. L\u00e6s den grundige forklaring om <a title=\"event objektet\" href=\"http:\/\/www.quirksmode.org\/js\/events_properties.html\">event properties.<\/a><\/p>\n<h3>Send data fra klienten til serveren\u00a0<\/h3>\n<p>Efterf\u00f8lgende skal data\u00a0 sendes fra klienten til serveren, s\u00e5 man kan gemme data i sin log fil. Dette g\u00f8res lettest med AJAX og et af de gode AJAX biblioteker, der findes. Jeg har brugt en l\u00f8sning med prototype.\u00a0 Hvis du \u00f8nsker at sende data fra klient til server p\u00e5 en anden m\u00e5de. F.eks. som en parameter i URL&#8217;en eller som et hidden input felt i en formular, skal du bare slettet den sidste kode blok.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sad p\u00e5 Statsbiblioteket og skulle lave en logging funktion til\u00a0den nye s\u00f8gemaskine Summa. Vi har allerede\u00a0flere logging funktioner tilknyttet Summa, men nu skulle vi bruge noget der kunne logge alle klik p\u00e5 links med AJAX funktionerne. Problemet med at logge links,\u00a0 der udf\u00f8rer AJAX kald, er at siden\u00a0ikke skiftes\/opdateres 100%, men kun opdateres lokalt.<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[2,19],"tags":[96,142,246,260,296],"_links":{"self":[{"href":"https:\/\/nielsgamborg.dk\/wordpress\/wp-json\/wp\/v2\/posts\/142"}],"collection":[{"href":"https:\/\/nielsgamborg.dk\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nielsgamborg.dk\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nielsgamborg.dk\/wordpress\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/nielsgamborg.dk\/wordpress\/wp-json\/wp\/v2\/comments?post=142"}],"version-history":[{"count":0,"href":"https:\/\/nielsgamborg.dk\/wordpress\/wp-json\/wp\/v2\/posts\/142\/revisions"}],"wp:attachment":[{"href":"https:\/\/nielsgamborg.dk\/wordpress\/wp-json\/wp\/v2\/media?parent=142"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nielsgamborg.dk\/wordpress\/wp-json\/wp\/v2\/categories?post=142"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nielsgamborg.dk\/wordpress\/wp-json\/wp\/v2\/tags?post=142"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}