24. maj 2006 - 15:15Der er
39 kommentarer og 1 løsning
Problem i IE: Angive en event på et element via JS
Hej js-nørder! :P
Jeg er løbet ind i et problem. Følgende kode illustrerer mit problem: var temp = document.createElement('div'); temp.appendChild(document.createTextNode('tester')); temp.setAttribute('onmousedown', 'alert(\'vi tester\');'); document.body.appendChild(temp);
... når man trykker på tester-div'en i Ildræven kommer der en alert - det gør der ikke i IE.
Hvordan angiver man en onmousedown via JS's DOM, så det virker i Internet Explorer?
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.
Da ingen af de store browsere har implementeret ægte XHTML, men falder tilbage på HTML, når der opstår en fejl, er der ikke idag nogen mulighed for at udvikle seriøse XHTML-applikationer, der kan bruges under XHTML. Det er du nødt til at gøre 'i blinde' - udfra viden du må læse dig til :o|
FF's implementation er rent ud elendig - da den bygger på deres i forvejen dårlige HTML/DOM-implementering ... og MS har besluttet ikke at understøtte ægte XHTML, før de er færdige med en helt ny version, der intet har med MSHTML at gøre. Derfor kommer IE7.0 heller ikke til at understøtte XHTML.
Hvis du skriver XHTML idag, får du bare tillagt dig en bunke dårlige kodevaner, som du tror er XHTML - men som bare vil vælte browseren med en XML-fejl, når vi engang kommer dertil ;o)
HTML4.01-Strict er mit bedste bud på et fornuftigt standard-valg i skrivende stund.
Se, det er god stil! Du finder selv noget kode efter du har fået svar - og deler det med os andre - lækkert! Dig skulle vi have nogle flere af her på eksperten :D
Jes jeg kører også HTML4.01, men derfor bør jeg vel alligevel sørge for at skrive fremtidssikret DOM-Javascript (ved fx at undgå at bruge setAttribute('onmouseover')).
En helt anden ting - kan man ikke kan anvende funktioner med parametre på events? Fx virker dette her ikke elm.addEventListener(elm, 'alert(\'hej\');');
Jeg er vant til at bruge document.onmousemove - og der kan man heller ikke bruge parametrer på den måde.
Men det kan man måske bare ikke i forbindelse med events? Egentlig forstår jeg jo godt hvorfor, eftersom document.onmousemove = badabing(par1, par2);
... vil resultere i at onmousemove bliver sat lig med det badabing returnerer, hvilket jo ikke er den umiddelbare mening med at opsætte events.
... nå jeg bliver nødt til lige at lege Spørgejørgen - for her kommer endnu et spørgsmål:
Funktionen der skal køres ved onmousedown skal i sin nuværende tilstand have to parametre. Jeg har hidtil brugt følgende kode til at tilføje onmousedown'en: temp.firstChild.setAttribute('onmousedown', 'return drag.activate(' + playerRef + ');');
Det er i forbindelse med et drag'n drop interface.
Kan dette oversættes til den "rigtige" metode (addEventListener/attachEvent)? Eller skal jeg lave nogle rokeringer i koden sådan at funktionen kan kaldes uden parametre (umiddelbart virker det mere bøvlet synes jeg...)
Meningen med "return" er, at man ikke skal kunne markere noget tekst mens man trækker et element (det er fra et drag'n drop-script). Giver det ikke mening? :)
Øhm, jeg kan altså ik' få det til at virke :( Prøv at køre dette "test-script": <script type="text/javascript"> function addEvent(elm, evType, fn, useCapture) { if (elm.addEventListener) { elm.addEventListener(evType, fn, useCapture); return true; } else if (elm.attachEvent) { var r = elm.attachEvent('on' + evType, fn); return r; } else { elm['on' + evType] = fn; } } function test() { return false; } var temp = document.createElement('div'); temp.appendChild(document.createTextNode('Denne kan man godt markere')); addEvent(temp, 'mousedown', function(){ return false; }); document.body.appendChild(temp); document.onselectstart = function() { return false; }; </script> <div onmousedown="return false;">Denne kan man ikke markere</div>
I IE har jeg disabled markering totalt via onselectstart - men i Firefox kan man godt markere den øverste div :( Any bright ideas?
Jeg gik ud fra at du ville have det sådan som teksten i laget beskrev, nemlig at den første (øverste) ikke kunne markeres og den sidste (nederste og genererede) kunne markeres - det fungerer i det mindste i både min FF 1.0 og IE 6.0
Kan du kort summere op hvad det er for en funktionalitet du ønsker...?
umiddelbart ville jeg jo bare forvente at du skulle fjerne denne linie i den dynamiske/javascript-styrede oprettelse af div-elementet, da det linien gør er at sætte et event som undlader at udføre nogle af de indeholdende elementers selectstart-events (cancelBubble = true forhindrer dette).
Altså:
window.onload = function() { var temp = document.createElement('div'); temp.appendChild(document.createTextNode('Denne kan man godt markere')); addEvent(temp, 'mousedown', function(){ return true; }); document.body.appendChild(temp); }
Jeg prøvede lige at udkommentere den linje du omtaler. Det hjalp intet. Du kan se siden her: http://shokk.dk/over.php Man kan stadig markere den dynamisk-genererede div :(
Ja, der er altså noget ved den der DOM som jeg ikke forstår (faktisk er der en del, men lad nu det ligge :))... såvidt jeg kan se, er det kode du får til at fungere og det jeg foreslår (som altså ikke fungerer) nøjagtigt det samme, men det synes addEvent så åbenbart ikke... :(
Spørgsmålet er om du skal skal ud i noget med preventDefault() (FF/NS osv) og returnValue = false (IE) for at forhindre mousedown i at udføres...
addEvent(temp, 'mousedown', function(e){ e = e ? e : event; if(e.preventDefault) e.preventDefault(); else if(e.returnValue) e.returnValue = false; else return false; });
jeg er usikker på om det spiller, men det burde være noget i den retning...
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.