Avatar billede or.han Nybegynder
15. december 2005 - 20:48 Der er 26 kommentarer og
1 løsning

Script virker i FF, men ikke i IE!!

Ja, nu har jeg så brugt et godt stykke tid på at finde fejl i mit script, men jeg fandt intet. Som sædvanlig virker det i Firefox, men ikke i IE. Det er næsten til at blive sindssyg af. Men ja her er mit script så:

        var posx = 0;
        var posy = 0;
        document.onmousemove = mousePos;
        window.onload = getBars;
       
        function avgBox(average){
            var boxObj = document.getElementById("avgBox");
            xC = posx-20;
            yC = posy-50;
            boxObj.innerHTML = average;
            boxObj.style.display = "block";
            boxObj.style.top = yC+"px";
            boxObj.style.left = xC+"px";
            setTimeout('hideBox()',5000);
        }
        function hideBox(){
            document.getElementById("avgBox").style.display = "none";
        }
        function mousePos(e){
            if (!e) var e = window.event;
            if (e.pageX || e.pageY){
                posx = e.pageX;
                posy = e.pageY;
            } else if (e.clientX || e.clientY) {
                posx = e.clientX + document.body.scrollLeft;
                posy = e.clientY + document.body.scrollTop;
            }
        }       
        function getBars(){
            var bars = document.getElementsByTagName("div");
            for ( var i = 0; i < bars.length; i++){
                if ( bars[i].getAttribute("class") == "odd" || bars[i].getAttribute("class") == "even" ){
                    bars[i].onclick = function(){
                        avgBox(Math.round((this.offsetHeight/20)*10)/10);
                    }
                }
            }
        }

Jeg har nogle søjler og hvis de bliver klikket på dukker en boks op, som forsvinder efter 5 sekunder. I IE sker der intet. Jeg har ikke meget forstand på hvilke ting som ikke virker i IE og omvendt, men jeg vil tro, at det er det.

På forhånd tak
Avatar billede roenving Novice
16. december 2005 - 00:20 #1
Fjern 'var' fra linjen, hvor du henter window.Event !-)
Avatar billede or.han Nybegynder
16. december 2005 - 13:46 #2
Hvis det er linjen:
if (!e) var e = window.event;

som skal ændres til:
if (!e) e = window.event;

så ændrer det ikke noget. Det virker ikke i IE, men stadig i FF.
Avatar billede johan.o Nybegynder
16. december 2005 - 14:05 #3
Hvilket 'output' får du i alert boxen i IE og i FF hvis du laver dette :

function avgBox(average){
alert("X : "+posx+" Y : "+posy);
var boxObj = document.getElementById("avgBox");

Mvh. Johan
Avatar billede or.han Nybegynder
16. december 2005 - 14:16 #4
Jeg får ikke noget output i IE, men i FF skriver den koordinaterne...
Avatar billede johan.o Nybegynder
16. december 2005 - 14:23 #5
Okay, hvad får du af output i denne alert :

function mousePos(e){
alert("Client : "+e.clientX+" Page : "+e.pageX);
if (!e) var e = window.event;

Mvh. Johan
Avatar billede or.han Nybegynder
17. december 2005 - 16:26 #6
Igen sker der intet i IE, og i FF står der to ens koordinater.
I IE siger den at der er fejl i scriptet:
'clientX' er null eller ikke et objekt

Kan det være at jeg har pillet ved nogle indstillinger i IE?? Eller hvad er der galt?
Avatar billede johan.o Nybegynder
17. december 2005 - 17:49 #7
Jeg har pillet lidt ved det, og dette virker vist som du vil have. Skriver lidt info bagefter :

<script type="text/javascript">

posx=10; posy=10;

function avgBox(average){
boxObj = document.getElementById("avgBox");
xC = posx-20;
yC = posy-50;
boxObj.innerHTML = average;
boxObj.style.display = "block";
boxObj.style.top = yC+"px";
boxObj.style.left = xC+"px";
setTimeout('hideBox()',5000);
}

function hideBox() {
document.getElementById("avgBox").style.display = "none"; }

function mousePos(e) {
if(e.pageX || e.pageY) {
  posx = e.pageX;
  posy = e.pageY; }
else if(e.clientX || e.clientY) {
  posx = e.clientX + document.body.scrollLeft;
  posy = e.clientY + document.body.scrollTop; }
}     

</script>

I body tag :

<body onmousemove="mousePos(event);">

Mvh. Johan
Avatar billede johan.o Nybegynder
17. december 2005 - 17:56 #8
Der var lidt problemer med at få event objektet 'flyttet' med til funktionen mousePos, men ved at skrive det direkte i funktions kaldet kommer det ihvertfald med.

Men er det et krav at funktionen mousePos hele tiden holder øje med cursoren's placering ? Det er vel kun nødvendigt at finde disse når funktionen avgBox kaldes. F.eks. :

bars[i].onclick = function() {
avgBox(Math.round((this.offsetHeight/20)*10)/10, event); }

function avgBox(average, e){
if(e.pageX || e.pageY) {
  posx = e.pageX;
  posy = e.pageY; }
else if(e.clientX || e.clientY) {
  posx = e.clientX + document.body.scrollLeft;
  posy = e.clientY + document.body.scrollTop; }
boxObj = document.getElementById("avgBox");
xC = posx-20;
yC = posy-50;
boxObj.innerHTML = average;
boxObj.style.display = "block";
boxObj.style.top = yC+"px";
boxObj.style.left = xC+"px";
setTimeout('hideBox()',5000);
}

I body tag :

<body>

Mvh. Johan
Avatar billede or.han Nybegynder
18. december 2005 - 00:36 #9
Nu virker det slet ikke. FF siger at event ikke er defineret...
Avatar billede johan.o Nybegynder
18. december 2005 - 11:01 #10
Jeg kan godt forestille mig at 17/12-2005 17:56:59 ikke virker, den strikkede jeg hurtigt sammen, men virker 17:49:23 heller ikke ?

Mvh. Johan
Avatar billede or.han Nybegynder
18. december 2005 - 12:03 #11
Jeg har prøvet begge og ingen af dem virker...
Avatar billede johan.o Nybegynder
18. december 2005 - 18:41 #12
Jeg glemte lidt tilføjelser i <style> - sorry :), det der er herunder virker hos mig i IE og FF.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html>
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
<title>Test.</title>
<style type="text/css">

html {
height: 100%; }

body {
height: 100%; }

</style>
<script type="text/javascript">

posx=10; posy=10;

function avgBox(average){
boxObj = document.getElementById("avgBox");
xC = posx-20;
yC = posy-50;
boxObj.innerHTML = average;
boxObj.style.display = "block";
boxObj.style.top = yC+"px";
boxObj.style.left = xC+"px";
setTimeout('hideBox()',5000);
}

function hideBox() {
document.getElementById("avgBox").style.display = "none"; }

function mousePos(e) {
if(e.pageX || e.pageY) {
  posx = e.pageX;
  posy = e.pageY; }
else if(e.clientX || e.clientY) {
  posx = e.clientX + document.body.scrollLeft;
  posy = e.clientY + document.body.scrollTop; }
}     

</script>
</head>

<body onclick="avgBox('Hej');" onmousemove="mousePos(event);">

<div style="position: absolute; width: 100px; height: 50px; border: 1px solid red; display: none;" id="avgBox"></div>

</body>
</html>

Mvh. Johan
Avatar billede johan.o Nybegynder
18. december 2005 - 18:45 #13
Naturligvis skal du beholde din funktion getBars() da den jo sætter onclick event's på dine søjler. Men det kan du sikkert selv tilføje uden problemer :)

Mvh. Johan
Avatar billede or.han Nybegynder
18. december 2005 - 20:59 #14
Jeg kan ikke bare skrive onclick="avgBox('Hej')" da denne funktion er tilføjet til hver søjle med forskellige højder. Og indholdet af boksen afhænger af den "aktive" søjles højde.

Hvorfor skal event-handlerne være i selve HTML'en??
Avatar billede johan.o Nybegynder
18. december 2005 - 23:10 #15
Nej, det er klart at du ikke bare kan kopiere det jeg har lavet :), jeg troede bare du selv kunne rette det til. Men prøv at se på dette :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html>
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
<title>Test.</title>
<style type="text/css">

html {
height: 100%; }

body {
height: 100%; }

</style>
<script type="text/javascript">

posx=10; posy=10;

function avgBox(average) {
boxObj = document.getElementById("avgBox");
xC = posx-20;
yC = posy-50;
boxObj.innerHTML = average;
boxObj.style.display = "block";
boxObj.style.top = yC+"px";
boxObj.style.left = xC+"px";
setTimeout('hideBox()',5000);
}

function hideBox() {
document.getElementById("avgBox").style.display = "none"; }

function mousePos(e) {
if(e.pageX || e.pageY) {
  posx = e.pageX;
  posy = e.pageY; }
else if(e.clientX || e.clientY) {
  posx = e.clientX + document.body.scrollLeft;
  posy = e.clientY + document.body.scrollTop; }
}     

function getBars() {
var bars=document.getElementsByTagName("div");
for(var i=0; i<bars.length; i++) {
  if(bars[i].id!="avgBox") {
  value=Math.round((bars[i].offsetHeight/20)*10)/10;
  bars[i].onclick = function() {
    avgBox(value); } } } }
       
</script>
</head>

<body onload="getBars();" onmousemove="mousePos(event);">

<div id="avgBox" style="position: absolute; border: 1px solid red; background-color: #FFFFFF; z-index: 100; display: none;" id="avgBox"></div>

<div id="beam" style="position: absolute; top: 200px; left: 200px; width: 20px; height: 200px; border: 1px solid blue; background-color: green;"></div>

</body>
</html>
Avatar billede johan.o Nybegynder
18. december 2005 - 23:12 #16
Hvis det skal rettes til at virke som jeg tror du vi have skal funktionen getBars() rettes til dette :

function getBars() {
var bars=document.getElementsByTagName("div");
for(var i=0; i<bars.length; i++) {
  if(bars[i].id!="avgBox") {
  if(bars[i].getAttribute("class")=="odd" || bars[i].getAttribute("class")=="even" ) {
    value=Math.round((bars[i].offsetHeight/20)*10)/10;
    bars[i].onclick = function() {
    avgBox(value); } } } } }

Jeg ved ikke om getAttribute() laver problemer mellem IE og FF men jeg tror det ikke.

Mvh. Johan
Avatar billede johan.o Nybegynder
18. december 2005 - 23:15 #17
Uops, der er stadig et problem med at overfører den korrekte værdi til onclick funktionen...hmmmm.....

Mvh. Johan
Avatar billede johan.o Nybegynder
18. december 2005 - 23:36 #18
He he...nej der var ingen problemer, jeg havde bare lige lidt 'fatte' problemer :)

Virker det for dig ?

Mvh. Johan
Avatar billede or.han Nybegynder
19. december 2005 - 16:04 #19
Du har vist misforstået det jeg vil.

Jeg har en masse søjler, som har klassen "odd" eller "even".

Disse søjler har en bestemt højde, og højden er et gennemsnit.

Ved at dividere højden på en søjle med 20, vil man få det oprindelige tal.

Det er så boksen "avgBox" som skal dukke op på den søjle man trykker på og vise den søjles gennemsnit.

Jeg fandt lige ud af at IE ikke understøtter .getAttribute("class"). I stedet for class, skal der bruges className. Jeg har lavet det om og nu virker det.

Så lav lige et spm, så får du point for indsatsen. Mange tak :D
Avatar billede johan.o Nybegynder
19. december 2005 - 16:40 #20
Øhm, hvad er forskellen på det du skriver herover og det som koden gør ??

Du har ikke vist noget af det html kode som scriptet skal fungerer sammen med, så det er naturligvis svært at vide hvordan det ser ud, men ovenstående kode gør vel det samme som din oprindelige kode...bare også i IE, som jo var dit problem...eller ??

Jeg skal ikke have point for indsatsen - men hvis dit problem er løst, med min hjælp, så tager jeg gerne imod point.

Mvh. Johan
Avatar billede or.han Nybegynder
19. december 2005 - 16:49 #21
Det du skriver 18/12-2005 23:10:06 virker, men jeg kan ikke bruge den fordi du bare tjekker om id ikke er lig med avgBox.

Jeg har mange andre div's på siden, så der skal tjekkes med class, som enten er odd eller even. Så har du også uden grund taget eventhandlerne ud og sat i html'en hvilket jo er unødvendigt.

Det der var skyld i at det ikke virkede i IE, var at den ikke understøttede getAttribute("class"), men i stedet getAttribute("className"). Din indsats har jo ikke rigtig løst mit problem, da du hele tiden har holdt fast i samme script (næsten).
Avatar billede or.han Nybegynder
19. december 2005 - 16:52 #22
Du har også pludselig lavet en variabel (value), som igen ikke behøves. Det har virket som at du ikke rigtig vidste hvad problemet var. Men alligevel tak fordi du prøvede...
Avatar billede johan.o Nybegynder
19. december 2005 - 17:16 #23
Med hensyn til variablen (value). Denne kode :

bars[i].onclick = function() {
avgBox(Math.round((bars[i].offsetHeight/20)*10)/10); }

giver en fejlmeddelelse i IE : 'bars[...].offsetHeight' er null eller ikke et objekt.

Men dette :

value=Math.round((bars[i].offsetHeight/20)*10)/10;
bars[i].onclick = function() {
avgBox(value); }

giver ingen fejl. Det er såmænd blot derfor jeg har lavet variablen (value).

Med hensyn til onmousemove handleren så er det for at få event objektet sendt til funktionen mousePos. Derved slipper du for at bokse med om event objektet er kendt i funktionen.

Men jeg vil da gerne se den kode du har fået til at virke, og som ikke inkluderer de ændringer jeg har lavet.

Mvh. Johan
Avatar billede or.han Nybegynder
19. december 2005 - 19:32 #24
Det virkende script:

var posx = 0; var posy = 0;
document.onmousemove = mousePos;
window.onload = getBars;

function avgBox(average){
    var boxObj = document.getElementById("avgBox");
    xC = posx-20;
    yC = posy-50;
    boxObj.innerHTML = average;
    boxObj.style.display = "block";
    boxObj.style.top = yC+"px";
    boxObj.style.left = xC+"px";
    setTimeout('hideBox()',5000);
}
function hideBox(){
    document.getElementById("avgBox").style.display = "none";
}
function mousePos(e){
    if (!e) var e = window.event;
    if (e.pageX || e.pageY){
        posx = e.pageX;
        posy = e.pageY;
    } else if (e.clientX || e.clientY) {
        posx = e.clientX + document.body.scrollLeft;
        posy = e.clientY + document.body.scrollTop;
    }
}       
function getBars(){
    var bars = document.getElementsByTagName("div");
    for ( var i = 0; i < bars.length; i++){
        if ( bars[i].className == "odd" || bars[i].className == "even"    ){
            bars[i].onclick = function(){
                avgBox(Math.round((this.offsetHeight/20)*10)/10);
            }
        }
    }
}


Der skal heller ikke bruges bars[i] men bare this ligesom jeg havde gjort for starten. Den eneste ændring som skulle til var .className
Avatar billede johan.o Nybegynder
19. december 2005 - 19:51 #25
Jamen, så er der da ingen grund til at jeg hiver point ud af den.

Mvh. Johan
Avatar billede or.han Nybegynder
19. december 2005 - 20:05 #26
Det er da fint så...
Avatar billede grace45 Nybegynder
25. oktober 2010 - 12:22 #27
Hej min kære,
Hvordan har du i dag, jeg håber, at alle er godt med dig. Jeg er ked af at bekymre dig med min Forslag til et forhold med dig, men jeg ved, at du vil imødekomme min anmodning i god tro og forståelse. Jeg har brug for dig i forretningsbetingelser og rådgive. Mit navn er Grace Dabah jeg bare gik gennem din profil har ingen andre muligheder end at lade dig vide, at jeg er interesseret i at have et forhold med dig, vil jeg også gerne vide dig mere, kan du sende en mail til min e-mail adresse (grace_11dabah @ yahoo.com), så jeg kan sende dig flere oplysninger om mig selv inklusive mit billede. Jeg tror, vi kan gå herfra. Men huske på, at kærlighed ikke har nogen farver barriere, ingen uddannelsesmæssige tilbage jorden barriere, ingen socio-økonomiske barrierer, religiøse, sprog, nationalitet eller afstand hindring, det eneste vigtige der er kærlighed. Jeg venter på din mail til min e-mail adresse ovenfor.
Med venlig hilsen,
Miss Grace.
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