Avatar billede kasseper Nybegynder
27. august 2001 - 15:39 Der er 12 kommentarer og
1 løsning

Tildeling af events : Part II

Hej - Jeg prøver lige igen....

Jeg har en side der består af 3 dele en header en side og en footer.
Jeg skal implementere en timer der skal løbe ud, hvis der ikke er noget aktivitet på siden.
Ret praktisk skal det fungere sådan at når siden hentes (onLoad) skal mit script startes, og ved hvert klik eller tastetryk på siden skal timeren opdateres.

Problemet ligger i at jeg kun har adgang til headeren, hvor body taget tilfældigvis ikke ligger i.

Jeg skal altså smide et funktionskald ind i onLoad, onClick og onKeyUp, eventsne på body tag\'et.

Det kan godt lade sig gøre, problemet er bare at det overskriver det der måske allerede står i body taggets events.

Det jeg har prøvet indtil nu :
<!-- HEADER : START -->
<html>
<head>
<title>TEST</title>
<script>
var count = 0;
function testMe()
{
    count++;
    test.innerText = count;
}

function alertMe()
{
        alert(\"test\");
}

</script>
<script defer>
document.body.onkeyup = alertMe;
eval(\"document.body.onclick = \" + document.body.onclick + \";alertMe;\");
document.body.onload = alertMe;
</script>

<!-- HEADER : SLUT -->
</head>
<body onClick=\"testMe();\">
<div id=\"test\">0</div>
</body>
</html>

Problemet her er at alertMe ikke bliver kaldt på onClick events, mens de andre event tildelinger fungere fint...
Altså hvordan tildeler jeg en event, dynamisk, uden at overskrive de eksisterende ?
Avatar billede olebole Juniormester
27. august 2001 - 15:46 #1
<ole>
Kan du ikke bare gøre sådan:

<!-- HEADER : START -->
<html>
<head>
<title>TEST</title>
<script>
var count = 0;
function testMe()
{
    count++;
    test.innerText = count;
}

function alertMe()
{
        alert(\"test\");
        testMe();
}

</script>
<script defer>
document.body.onclick = alertMe;
</script>

<!-- HEADER : SLUT -->
</head>
<body onClick=\"testMe();\">
<div id=\"test\">0</div>
</body>
</html>

/mvh
</bole>
Avatar billede kasseper Nybegynder
27. august 2001 - 15:48 #2
Nej for så bliver det oprindelige function på onClick (testMe()) ikke kørt ved OnClick.

Det hele kommer sig af at det er en del af et meget stort project. VI har en servlet, som henter header, den rette side og footer og smeder sammen til et document.
DVS. jeg ved reelt ikke om der er nogen events tildelt til body tagget, og dem må jeg ikke overskrive, kun tilføje....!
Avatar billede kasseper Nybegynder
27. august 2001 - 15:50 #3
OK, jeg havde ikke lige set at du havde lagt et kald til testMe ind i alertMe, men det er samme surdej...:(
Avatar billede olebole Juniormester
27. august 2001 - 16:02 #4
Det er da en fuldstændig anden surdej...begge funktioner bliver kørt på onclick.
Hvad er det, du vil have?
/mvh
Avatar billede kasseper Nybegynder
27. august 2001 - 16:07 #5
Det jeg vil ha, er at jeg tilføjer et funktionskald efter dem der er i body tagget\'s event handlere.

Lad os sige at min header bliver smidt på denne side :

</head>
<body onLoad=\"testScript()\">
<script>
function testScript()
{
// her er der så noget kode der skal udføres....
}
</body>
</html>

Så har jeg jo ikke mulighed for at vide at jeg skal inkludere et kald til testScript i min function......!




MEN

JakobA er med her er hvad han har svaret inde i dette spg : http://www.eksperten.dk/spm/102718
--------------------------------------
Nej det er ikke umuligt.

prøv at sige
var tmptx = window.onload.toString();

så får du den onload handler der er aktiv.

den kan du så klippe i og tilføje din ekstra onload event til.

men der skal parses noget så du fx ikke kommer til at placerer din ekstra handeler kode bagefter et \'return ...\'.

og hvis de andre komponenter defineres i body og i footer bliver det endnu værre for så er det jo dem du skal have lavet om i for at få dem til ikke at overskrive den du definerer i headeren.

du kunne evt lave dig et array for hver evnttype:

var onloads = new Array();

function doonload() {
  for (var i=0; onloads.length>i; i++ ){ eval(onloads[i];
}; //end

window.onload=doonloads;

og så lægge dine onload handlere ind som

onloads[onloads.length] = \"javascript kode\";

efterhånden som du kommer til dem, Så er det ligemeget hvor mange eller få der er :-))

Men jeg ved ikke hvordan det vil reagere på en \'return\' i en af handlerne.

mvh JakobA
----------------------------------
Avatar billede olebole Juniormester
27. august 2001 - 16:10 #6
Det kan du heller ikke - men ikke af den grund, jakoba frygter  :)
Jeg skal prøve at lægge den til modning i \'cellen\'.
/mvh
Avatar billede kasseper Nybegynder
27. august 2001 - 16:15 #7
:)
Avatar billede kasseper Nybegynder
27. august 2001 - 16:22 #8
Det her virkede for onLoad :

<!-- HEADER : START -->
<html>
<head>
<title>TEST</title>
<script>
var count = 0;
function testMe()
{
    count++;
    test.innerText = count;
}

function alertMe()
{
        alert(\"test\");
}

</script>
<script defer>
document.body.onkeyup = alertMe;
document.body.onclick = alertMe;
//document.body.onload = alertMe;

var tmptx = window.onload.toString();
//alert(tmptx);
var tempdest = tmptx.indexOf(\"testMe()\");
//alert(tempdest);
//alert((tmptx.substring(0,tempdest+10))+\"alertMe();\\n}\");
eval(\"window.onload = \" + (tmptx.substring(0,tempdest+10)) + \"alertMe();\\n}\");
//alert(window.onload.toString());
//eval(\"window.onload = \" + tmptx

</script>

<!-- HEADER : SLUT -->
</head>
<body onLoad=\"testMe();\" onClick=\"testMe();\">
<div id=\"test\">0</div>
</body>
</html>
Avatar billede kasseper Nybegynder
27. august 2001 - 16:23 #9
Og man kan jo vel bare tage substr,fra start til slut - 1, og sætte din function ind ?
Avatar billede kasseper Nybegynder
27. august 2001 - 16:39 #10
DET VIRKER :


<!-- HEADER : START -->
<html>
<head>
<title>TEST</title>
<script>
var count = 0;
function testMe()
sd{
    count++;
    test.innerText = count;
}

function alertMe()
{
        alert(\"test\");
}

</script>
<script defer>

var tmptx = window.onload.toString();
eval(\"window.onload = \" + (tmptx.substring(0,tmptx.length-1)) + \"alertMe();\\n}\");

var tmp2tx = document.body.onclick.toString();
eval(\"document.body.onclick = \" + (tmp2tx.substring(0,tmp2tx.length-1)) + \"alertMe();\\n}\");

var tmp3tx = document.body.onkeyup.toString();
alert(tmp3tx);

eval(\"document.body.onkeyup = \" + (tmp3tx.substring(0,tmp3tx.length-1)) + \"alertMe();\\n}\");
alert(document.body.onkeyup.toString());

</script>

<!-- HEADER : SLUT -->
</head>
<body onLoad=\"testMe();\" onClick=\"testMe();\" onKeyUp=\"testMe();\">
<div id=\"test\">0</div>
</body>
</html>


Men læg mærke til at det er lidt svært at aktivere onKeyUp, fordi at det er svært få focus ned på document, da der kommer alle mulige alerts op.....Men det virker i det virkelige liv...Tak til jakobA, så hvis han vil lægge et svar.
Avatar billede kasseper Nybegynder
27. august 2001 - 16:41 #11
jeg acceptere imorgen eller senere :-)
Avatar billede jakoba Nybegynder
29. august 2001 - 11:51 #12
Altid glad for points :-))
takker
Avatar billede kasseper Nybegynder
29. august 2001 - 12:07 #13
ja selv tak....
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