Avatar billede andreas13_fam Nybegynder
16. februar 2010 - 12:31 Der er 6 kommentarer og
1 løsning

kør kode når der ikke indtastes

Hej

Jeg har et <input> felt som en bruger kan skrive i. Jeg ønsker så at køre en kode når brugeren ikke har indtastet noget i fx 500 millisekunder.

Det skal desuden være sådan at this eller en anden variabel henviser til input feltet.
Avatar billede majbom Novice
16. februar 2010 - 12:58 #1
kan du ikke køre en function med setTimeout ved onchange på textfeltet?
Avatar billede andreas13_fam Nybegynder
16. februar 2010 - 13:36 #2
nej det vil ikke give mening splazz, da onchange kun bliver aktiveret når feltet mister fokus. Derimod er onkeydown noget mere brugbar da den også aktiveres hvis en tast holdes nede.

Mit testrum (det virker selvfølgelig ikke):

<!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 getNodeType (ele) {
                switch(ele.nodeType) {
                    case 1:
                      return 'element';
                      break;
                    case 2:
                      return 'attribute';
                      break;
                    case 3:
                      return 'text node';
                      break;
                    case undefined:
                      return 'undefined (window)'
                      break;
                }
            }
           
            function run (ele) {
                document.getElementById('test').appendChild(document.createTextNode(ele + "\n  NodeType: "+ getNodeType(ele) + "\n\n"));
            }
        </script>
    </head>
    <body>
        <input type="text" onkeydown="this.foo = window.setTimeout(function () {run(this)},500);"></input>
        <pre style="margin:5px;padding:2px;border:2px solid #72AFFF;width:250px;" id="test"></pre>
    </body>
</html>
Avatar billede andreas13_fam Nybegynder
16. februar 2010 - 14:13 #3
Fandt enlig løsningen.
Det er korrekt at der skal bruges setTimeout, men man skal huske at fjerne den igen ved hjælp af clearTimeout for næste setTimeout sættes.
måden at få fat i this er ved hjælp af event.taget


<!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 getNodeType (ele) {
                switch(ele.nodeType) {
                    case 1:
                      return 'element ('+ele.tagName+')';
                      break;
                    case 2:
                      return 'attribute';
                      break;
                    case 3:
                      return 'text node';
                      break;
                    case undefined:
                      return 'undefined (window)'
                      break;
                }
            }
           
            function run (evt,ele) {
                var node = ele + "\n";
                    node += "  EventType: " + evt.type + "\n";
                    node += "  EventTaget: " + evt.target + "\n";
                    node += "  NodeType: "+ getNodeType(ele) + "\n";
                    node += "\n";
                document.getElementById('test').appendChild(document.createTextNode(node));
            }
        </script>
    </head>
    <body>
        <input type="text" onkeydown="clearTimeout(this.vaild); this.vaild = setTimeout(function () { run(event,this) },500);" onblur="clearTimeout(this.vaild); run(event,this);">
        <button onclick="while(document.getElementById('test').firstChild) {document.getElementById('test').removeChild(document.getElementById('test').firstChild)}">clear</button>
        <pre style="margin:5px;padding:2px;border:2px solid #72AFFF;width:350px;" id="test"></pre>
    </body>
</html>


Jeg ligger denne som svar hvis du vil have del i pointene splazz må du lige skrive.
Avatar billede majbom Novice
16. februar 2010 - 15:27 #4
points må du gerne beholde :) men hvordan laver du den ramme?
Avatar billede preppydude Nybegynder
16. februar 2010 - 16:20 #5
splazz:
Rammen kan du lave ved at skrive (div)tekst(/div) - hvor du erstatter ( med [ og ) med ]. Hvis du skal paste noget kode, så burde du nok også indsætte en PRE, altså: (div)(pre)kode her(/pre)(/div).

Så kommer det til at se sådan her ud :b
Avatar billede majbom Novice
16. februar 2010 - 19:40 #6
snedigt

jeg har prøvet med border og frame, men det gik ikke så godt :)

takker
Avatar billede andreas13_fam Nybegynder
19. februar 2010 - 20:59 #7
Kendte fakktisk ikke til (pre).
Men jeg lukker nu.
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