Re: document.getElementById("element").style.(left|top)
Von: Thomas 'PointedEars' Lahn (pointedears@web.de) [Profil]
Datum: 15.06.2008 22:54
Message-ID: <4855817F.3060804@PointedEars.de>
Newsgroup: de.comp.lang.javascript
Datum: 15.06.2008 22:54
Message-ID: <4855817F.3060804@PointedEars.de>
Newsgroup: de.comp.lang.javascript
Lorenz Gorse wrote: > Code: > <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" > "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> > <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de"> Du brauchst hier kein XHTML; HTML 4.01 (möglichst Strict) genügt und ist auch kompatibler. > <head> > > <title>Titel</title> <http://www.w3.org/QA/Tips/good-titles> > <script language="javascript" type="text/javascript"> Das language-Attribut ist deprecated, was anscheinend der einzige Grund hier ist, Transitional statt Strict zu deklarieren. Du brauchst das nicht. Ausserdem hast Du <http://www.w3.org/TR/xhtml1/#h-4.8> und <http://www.w3.org/TR/xhtml1/#C_4> nicht beachtet. > var x; > var y; Diese Variablen müssen und sollten hier nicht global deklariert werden. > function init() > { > document.captureEvents(Event.MOUSEMOVE); Das ist Netscape 4-proprietär und daher veraltet. <http://developer.mozilla.org/en/docs/DOM:document#Methods> > document.onmousemove = pos; Das ist auch proprietär ("DOM Level 0"). Standardkonform ist und von Firefox 3 Beta/RCx ganz sicher verstanden wird: document.addEventListener("mousemove", pos, true); `true', weil die vorherige Anweisung vermuten lässt, dass Du den Event capturen willst; andernfalls müsstest Du `false' schreiben. <http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-EventTarget-addEventListene r> > } Nach Korrektur besteht die Methode dann nur noch aus einer Anweisung, daher ist es vermutlich sinnvoller, dann gleich <body onload="document.addEventListener('mousemove', pos, true);"> zu schreiben, denn dann spartest Du Dir auch das script-Element und die Querelen in XHTML damit. Die Standard-Script-Sprache solltest Du dann allerdings per meta-Element angeben. > function pos(e) > { > x = e.clientX; > y = e.clientY; Ersetzen durch var x = e.clientX; var y = e.clientY; Alternativ sinnvoll: // Object-Objekt var coords = {x: e.clientX, y: e.clientY}; oder // Array-Objekt var coords = [e.clientX, e.clientY]; > var variable = x+","+y; Besser: var inhalt = x + "," + y; Alternativ: // Object-Objekt var inhalt = coords.x + "," + coords.y; oder // Array-Objekt var inhalt = coords.toString(); Noch besser: Überflüssige Variable weglassen. > document.getElementById('text').innerHTML = variable; Besser: document.getElementById('text').innerHTML = inhalt; Alternativ: document.getElementById('text').innerHTML = coords.x + "," + coords.y; oder document.getElementById('text').innerHTML = coords.toString(); Jedoch: `innerHTML' ist proprietär. Mittels Zuweisung an `nodeValue' oder `textContent' kannst Du den Textinhalt eines Elements standardkonform setzen. Firefox 3 unterstützt beides. Hier genügt jedoch bereits ein Formularsteuerelement, welches Du mit per Zuweisung an document.forms[...].elements[...].value füllen kannst. > document.getElementById('text').style.left = x+"px"; > document.getElementById('text').style.top = y+"px"; Das ist ineffizient und fehlerträchtig. Stattdessen: var target = document.getElementById('text'); if (target) { // bzw. siehe oben target.innerHTML = variable; target.style.left = x + "px"; target.style.top = y + "px"; } else { // DEBUG window.alert("Das Element mit der ID `text' gibt es nicht!"); } Und wie von Sascha schon angemerkt, bewirken Deklarationen von `left' und `top', mithin Zuweisungen an style.left und style.top ohne die Deklaration von `position' != static, mithin die Zuweisung an style.position ! "static", genau gar nichts. Das ist aber *CSS*-Basiswissen. > } > [...] > Die Zuweisung von left und top klappt nicht. http://glasgoogle.de/ http://getfirebug.com/ > Mit anderen Eigenschaften, wie zum Beispiel font-famiy klappt es. Die haben wahrscheinlich nichts mit der Positionierung zu tun. > Ich benutze Firefox 3. Der AFAIK frühestens am Dienstag (PST) released wird. Du benutzt also eine Betaversion, und dürftest Dich nicht wundern, wenn etwas nicht funktioniert. Sofern Du den neuesten Release Candidate benutzt *und* Fehler Deinerseits ausschliessen kannst, hättest Du somit noch die Chance, das Release oder dessen Nachfolger per Bugreport zu verbessern :) HTH PointedEars -- Clientseitig geht das nicht wirklich, weil der Browser selbst keine Mails verschicken kann und das Kooperieren mit Mailprogrammen eher in ein Kollabieren entartet. (Georg Maaß in dcljs <aoh6vi$mbrnu$4@ID-3551.news.dfncis.de>)[ Auf dieses Posting antworten ]
