Selbst erzeugter Hint wird nicht mehr angezeigt
Urba
- javascript
Hallo Leute,
Ich habe folgendes Problem. Auf einer meiner Seiten die nur intern genutzt wird werden beim überfahren mancher Textzüge Hinweise in Form eines selbst erzeugten Hints angezeigt. Code dazu :
<div id="hint" style="position:absolute;visibility:hidden;z-index:999"></div>
<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
<!--
//Hintposition
Xoffset=+0;
Yoffset=+20;
var skn;
var ns4 = document.layers
var ns6 = document.getElementById&&!document.all
var ie4 = document.all
if (ns4) skn = document.hint; else
if (ns6) skn = document.getElementById("hint").style; else
if (ie4) skn = document.all.hint.style;
if(ns4)document.captureEvents(Event.MOUSEMOVE);
else{
skn.visibility = "visible"
skn.display = "none"
}
document.onmousemove = get_mouse;
document.onmouseout = kill;
function popup(msg){
//Breite festlegen
var hintsize = "width:250px;";
if (msg.length < 50) hintsize = "";
//Inhalt eintragen
var content= "<table border=0 style='"+hintsize+"border:1px solid;border-color:#87A8C9;' cellpadding=2 cellspacing=0 bgcolor='#E6EDF5'>"+
"<tr><td align=left><div style='font-family:Arial,Helvetica,sans-serif;font-size:12px;color:#000000;'>"+msg+"</div></td></tr></table>";
if(ns4){skn.document.write(content);skn.document.close();skn.visibility="visible"}
if(ns6){document.getElementById("hint").innerHTML=content;skn.display=''}
if(ie4){document.all("hint").innerHTML=content;skn.display=''}
}
function get_mouse(e){
//Koordinaten auslesen
var x=(ns4||ns6)?e.pageX:event.x+document.body.scrollLeft;
skn.left=x+Xoffset;
var y=(ns4||ns6)?e.pageY:event.y+document.body.scrollTop;
skn.top=y+Yoffset;
//prüfe ob in Fenster passt
var fensterbreite = document.body.offsetWidth;
var divbreite = parseInt(skn.left) + 250;
if (divbreite > fensterbreite) {
skn.left = parseInt(skn.left) - (divbreite - document.body.offsetWidth) - 10;
}
}
function kill(){
if(ns4){skn.visibility="hidden";}
else if (ns6||ie4) skn.display="none"
}
-->
</SCRIPT>
Die Seite ist nun noch nicht vollständig validiert. Unter anderem wurde der Doctype noch nicht gesetzt. Das liegt daran daß ich mich mit obigem Code lange genug herumgeschlagen habe und das ganze nur ohne Doctype funktioniert, darüberhinaus war eine vollständige Validierung bisher nicht erforderlich! Wenn ich
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
der Seite voranstelle wird der Hint nur noch oben link bei 0,0 angezeigt. Kann mir jemand sagen woran das liegt? Ohne Doctype funktioniert es wie gesagt.
Gruß
Urba
hi,
Die Seite ist nun noch nicht vollständig validiert. Unter anderem wurde der Doctype noch nicht gesetzt. Das liegt daran daß ich mich mit obigem Code lange genug herumgeschlagen habe und das ganze nur ohne Doctype funktioniert,
Weil die Browser dann deinen Fehler, ungültige CSS-Angaben zu machen, großzügig korrigieren.
Längenangaben in CSS erfordern _immer_ eine Einheit, sofern der Wert nicht 0 ist.
darüberhinaus war eine vollständige Validierung bisher nicht erforderlich!
Sie ist immer erforderlich.
gruß,
wahsaga
<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
language ist veraltet.
<!--
HTML Kommentare sind nur nötig, wenn du mit Browser der 1. Generation rechnest
var ns4 = document.layers
var ns6 = document.getElementById&&!document.all
var ie4 = document.all
Bei deinem Code würde es durchaus ausreichen, einfach zu testen, was du verwendest.
if(ns4)document.captureEvents(Event.MOUSEMOVE);
else{
skn.visibility = "visible"
skn.display = "none"
}
Also was die Sachen miteinander zu tun haben ist mir rätselhaft und warum der Netscape 4 Browser das Element nicht verstecken darf. Ausserdem würde eine angabe reichen, also entweder mit visibility oder mit display (was in deinem Fall zu bevorzugen ist)
function popup(msg){
//Breite festlegen
var hintsize = "width:250px;";
if (msg.length < 50) hintsize = "";
Da du hier die Mindestbreite von der Textlänge abhängig machst, wäre eine Angabe in em sinnvoll.
//Inhalt eintragen
var content= "<table border=0 style='"+hintsize+"border:1px solid;border-color:#87A8C9;' cellpadding=2 cellspacing=0 bgcolor='#E6EDF5'>"+
"<tr><td align=left><div style='font-family:Arial,Helvetica,sans-serif;font-size:12px;color:#000000;'>"+msg+"</div></td></tr></table>";
Das ist grausam.
Wozu denn dieses Konstrukt? Hier ist nichts was eine Tabelle nötig macht, im gegenteil du musst so sogar noch wesentlich mehr Angaben machen um das gewünschte Erscheinungsbild zu erreichen.
Im Prinzip würde msg reichen, da du die anderen Angaben problemlos über die style Eiegnschaft ändern könntest oder direkt im CSS da sich die Werte ja nicht ändern.
function get_mouse(e){
//Koordinaten auslesen
var x=(ns4||ns6)?e.pageX:event.x+document.body.scrollLeft;
skn.left=x+Xoffset;
var y=(ns4||ns6)?e.pageY:event.y+document.body.scrollTop;
skn.top=y+Yoffset;
Hier kommen die Probleme warum du keinen DOCTYPE angeben kannst, einmal wie wahsaga schon schrieb, fehlen hier die Einheiten und dann ist document.body im IE nicht richtig, im Standardmode ist es document.documentElement, was sich vor allem bei der Fensterbreitenermittelung bemerkbar macht.
Wie man es macht kannst du hier nachlesen: http://www.quirksmode.org/viewport/compatibility.html#link2
Struppi.