Avatar billede the_ghost Nybegynder
12. marts 2004 - 17:17 Der er 9 kommentarer og
1 løsning

event problem ved Mozilla

Jeg har dette script:
if(window.event.srcElement.className == "tab")
{
  ...
}
og det fungere også ganske fint i IE + Opera, men jeg kan ikke få det til at virke i Mozilla 0.8.

Jeg har fundet frem til dette:
var nav = window.Event ? true : false; //giver true i Mozilla 0.8
var nav2 = window.event ? true: false; //giver true i IE + Opera

Men så skulle man jo tro at jeg bare kunne bruge window.Event istedet for window.event, men det kan jeg ikke.. Så har jeg været inde og se hvad de returnere og window.event returnere et object, mens window.Event returnere et Event.

Jeg har prøvet alle mulige kombiantioner for at få det til at fungere, men det virker stadigvæk ikke, så derfor søger jeg hjælp her.

Jeg håber at I kan hjælpe mig

På forhånd tak

The Ghost
Avatar billede =maddog= Nybegynder
12. marts 2004 - 18:25 #1
En funktion, der bliver afviklet under et event i Moz/NS tager dette event som argument. Sort snak. Et eksempel.
function tellme(e) {
  if(e)event=e; // e er event objektet under Moz/NS
  alert(event.srcElement.tagName);
}
onclick=tellme;

Desuden findes srcElement ikke i NS/Moz. Det kan vi løse med defineGetter prototype modellen.

if  (window.Element) {
    // Herinde anbringer vi element baserede prototyper.
    Event.prototype.__defineGetter__("srcElement", function () {
        var node = this.target;
        while (node.nodeType != 1) node = node.parentNode;
        return node;
    });
}

Det samlede eksempel
<html><head><title>Untitled</title>
<script>
if  (window.Element) {
    Event.prototype.__defineGetter__("srcElement", function () {
        var node = this.target;
        while (node.nodeType != 1) node = node.parentNode;
        return node;
    });
}
function tellme(e) {
  if(e)event=e; // e er event objektet under Moz/NS
  alert(event.srcElement.tagName);
}
document.onclick=tellme;
</script>
</head><body>
<div> En div </div>
<p> Et afsnit </p>
</body></html>

Håber du forstår det. Ellers må jeg uddybe det.
Avatar billede =maddog= Nybegynder
12. marts 2004 - 18:31 #2
I øvrigt er window.event under IE og window.Event under NS/Moz fundamentalt forskellig. window.event er en instans af et object og window.Event er en prototype konstruktor. Prøv at afvikle
alert(window.Event);
under NS/Moz.
Avatar billede the_ghost Nybegynder
12. marts 2004 - 18:41 #3
Jeg kan ikke rigtigt få det til at fungere, så smider lige lidt mere kildekode ud:

<HTML>
<head>
<script>
function init()
{
  //tabContents.innerHTML = t1Contents.innerHTML;
    document.getElementById('tabContents').innerHTML = document.getElementById('t1Contents').innerHTML;
}

var currentTab;
var tabBase;
var firstFlag = true;

function changeTabs( e )
{

    if(firstFlag == true)
    {
        currentTab = document.getElementById('t1');
        tabBase = document.getElementById('t1base');
        firstFlag = false;
    }

    if(window.event.srcElement.className == "tab") //Det er her problemet opstår
    {
        ...
      }
}
</script>
</head>
<body onclick="changeTabs( this )" onload="init()">
<TABLE NAME="tbl" ID="tbl" STYLE="width:100%;" CELLPADDING=0 CELLSPACING=0>
    <TR>
        <TD ID=t1 CLASS=selTab HEIGHT=25>Forside</TD>
        <TD ID=t2 CLASS=tab>Sambo</TD>
        <TD ID=t3 CLASS=tab>Forum</TD>
        <TD ID=t4 CLASS=tab>Kommentarer</TD>
        <TD ID=t5 CLASS=tab>Links</TD>
        <TD ID=t6 CLASS=tab>Info</TD>
        <TD ID=t7 CLASS=tab>Temp</TD>
    </TR>
  ...
</table>
</body>
</HTML>

Håber at det kan give dig et bedre indblik i mit prob.
Avatar billede =maddog= Nybegynder
12. marts 2004 - 18:54 #4
<html>
<head>
<script>
function init() {
  //tabContents.innerHTML = t1Contents.innerHTML;  avs. en document.all brøler.
    document.getElementById('tabContents').innerHTML = document.getElementById('t1Contents').innerHTML;
}
if  (window.Event) {
    Event.prototype.__defineGetter__("srcElement", function () {
        var node = this.target;
        while (node.nodeType != 1) node = node.parentNode;
        return node;
    });
}

var currentTab, tabBase, firstFlag = true;

function changeTabs( e ) {
    if(e) event=e;
    if(firstFlag == true) {
        currentTab = document.getElementById('t1');
        tabBase = document.getElementById('t1base');
        firstFlag = false;
    }
    if(event.srcElement.className == "tab") {
        alert("Hul igennem");
    }
}
document.onclick = changeTabs;
</script>
</head>
<body onload="init()">
<div id="tabContents"> Er her bare for at det skal opfylde scriptet </div>
<div id="t1Contents"> Er her bare for at det skal opfylde scriptet </div>
<TABLE NAME="tbl" ID="tbl" STYLE="width:100%;" CELLPADDING=0 CELLSPACING=0>
    <TR>
        <TD ID=t1 CLASS=selTab HEIGHT=25>Forside</TD>
        <TD ID=t2 CLASS=tab>Sambo</TD>
        <TD ID=t3 CLASS=tab>Forum</TD>
        <TD ID=t4 CLASS=tab>Kommentarer</TD>
        <TD ID=t5 CLASS=tab>Links</TD>
        <TD ID=t6 CLASS=tab>Info</TD>
        <TD ID=t7 CLASS=tab>Temp</TD>
    </TR>
  ...
</table>
</body>
</html>

Ser ud til at virke.
Avatar billede the_ghost Nybegynder
12. marts 2004 - 20:07 #5
Fedt.. Nu virker det i Mozilla... Men nu kan jeg ikke få det til at virke i Opera

Jeg kan ikke få den til at udføre scriptet videre end til linien:
Event.prototype.__defineGetter__("srcElement", function () {
Avatar billede the_ghost Nybegynder
12. marts 2004 - 20:17 #6
nevermind.. Jeg har lavet det.. Jeg ændrede if( window.Event ) til if( !document.all ) og nu virker det..

Kan du ikke ligge et svar, så giver jeg dig lige pointene
Avatar billede =maddog= Nybegynder
12. marts 2004 - 21:01 #7
Det gør jeg.
Avatar billede olebole Juniormester
13. marts 2004 - 20:01 #8
<ole>

'event.srcElement' hedder (med forbehold for forskellene på en event's implementering i de to browsere) 'e.target' i Mozilla. Eksempel:

<html>
<head>
<script type="text/JavaScript">
function bla(e) {
    var srcElm = (window.event)? window.event.srcElement : e.target;
    alert(srcElm.id + " :: " + srcElm.tagName)
}
document.onclick = bla;
</script>
</head>
<body>

<h3 id="ib">Dette er Ib</h3>
<div id="bodil">Dette er Bodil</div>

</body>
</html>

/mvh
</bole>
Avatar billede =maddog= Nybegynder
13. marts 2004 - 22:41 #9
Det gør den nemlig olebole. Det er derfor jeg gør sådan her
        var node = this.target;
        while (node.nodeType != 1) node = node.parentNode;
        return node;
i srcElement under NS/Moz. Jeg blandrer op gennem node-træet indtil der findes et HTMLDomElement (TextElement har nodeType 1).
Jeg har valgt at gøre det på den måde for at undgå en codebranch.
Avatar billede olebole Juniormester
13. marts 2004 - 22:47 #10
I know ... men 100 mod 1 på, at der er mange andre, der ikke fik fat i den - uden lidt uddybning ... det var bare lige det  ;o)
/mvh
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

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