Avatar billede andreas13_fam Nybegynder
19. februar 2010 - 21:28 Der er 4 kommentarer og
1 løsning

få event fra settimeout i IE

Jeg har lidt af et problem.
Jeg har en setTimeout som bruges til at finde ud af om der indtastes noget (http://www.eksperten.dk/spm/901870).

Mit problem er at i Internet Explore forsvinder event, når noget køres inde fra en setTimeout.
Hvis der findes alternative måder en at få fat i elementet som eventet tilhøre end event.target/event.srcElement er det muligt at disse også kan bruges.

Mit testrum:


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <title>TEST</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <meta http-equiv="Content-Language" content="da">
        <script type="text/javascript">
            function pretest (str) {
                document.getElementById('pretest').appendChild(document.createTextNode(str + "\n"));
            }
           
            function run (evt,ele) {
                var evt = evt ? evt : window.event;
                pretest(evt);
            }
        </script>
    </head>
    <body>
        <input type="text" onkeydown="clearTimeout(this.vaild); this.vaild = window.setTimeout(function () { run(event,this) },500);" onblur="clearTimeout(this.vaild); run(event,this);">
        <button onclick="while(document.getElementById('pretest').firstChild) {document.getElementById('pretest').removeChild(document.getElementById('pretest').firstChild)}">clear</button>
        <pre style="margin:5px;padding:2px;border:2px solid #72AFFF;width:350px;" id="pretest"></pre>
    </body>
</html>

Avatar billede intenz Novice
20. februar 2010 - 09:23 #1
Du bruger jo ikke eventen til noget? Hvis du skal have elementet eventen sker på, er 'this' nok.

Det er også lidt svært at overskue, når du ligger al dine kode inde i HTML tags'ne. Du bør opretter funktioner til den kode, og så kalde dem der.
Avatar billede andreas13_fam Nybegynder
20. februar 2010 - 10:25 #2
Er godt klar over at man kan bruge this. Men this forsvinder bare i alle browser, når den kommer inde for en funktion i setTimeout.

Hvis du mener at this kan bruges vil jeg meget gerne se et løsnings forslag, for så er der noget jeg har overset.

Med hensyn til at overskue koden, så skulle jeg nok have nævnt at det udelukkende er denne del (I HTML delen) Der er hver at fokusere på.:

onkeydown="
  clearTimeout(this.vaild); //fjerne Timeout
  this.vaild = window.setTimeout(function () { //Ny Timeout
    run(event,this) //køre funktion fra <script> tag
  },500);"
Avatar billede intenz Novice
20. februar 2010 - 11:01 #3
Den forsvinder ikke hvis du kaldet funktioner i HTML koden i stedet for at kalde det hele direkte deri.
Jeg har lavet det lidt om og fjernet event fra funktionerne (jeg kan ikke se hvad du vil med dem, men de kan bare tilføjes igen).


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>TEST</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta http-equiv="Content-Language" content="da">
<script type="text/javascript">
function pretest (e) {
str = e.value;
document.getElementById('pretest').appendChild(document.createTextNode(str + "\n"));
}

function run (e) {
pretest(e);
}

var valid;
function keyDown(e) {
clearTimeout(valid);
valid = setTimeout(function () { run(e) },500);
}

function inputBlur(e) {
clearTimeout(valid);
run(e);
}

</script>
</head>
<body>
<input type="text" onkeydown="keyDown(this);" onblur="inputBlur(this);">
<button onclick="while(document.getElementById('pretest').firstChild) {document.getElementById('pretest').removeChild(document.getElementById('pretest').firstChild)}">clear</button>
<pre style="margin:5px;padding:2px;border:2px solid #72AFFF;width:350px;" id="pretest"></pre>
</body>
</html>
Avatar billede andreas13_fam Nybegynder
22. februar 2010 - 14:15 #4
Det kan jeg godt se intenz, dit eksempel vedligeholder this variablen. Hvad forskellen der gør at mit eksempel ikke går er mig dog en gåde.

Men uanset hvad fortjener du dine point. Så hvis du vil ligget et svar ville det være dejligt.
Avatar billede intenz Novice
22. februar 2010 - 16:37 #5
Jeg laver det aldrig ved at sætte koden direkte ind i HTML tag, kun funktioner. Jeg vil dog tro det er fordi du befinder dig i det globale scope når du koder direkte i HTML'en. Men det er bare et bud.

Her er et svar i hvert fald.
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