Avatar billede evilkneivel999 Nybegynder
17. marts 2009 - 19:09 Der er 20 kommentarer og
1 løsning

Put variabel i input-field

Det er helt basic det her, men jeg er en klovn til javascript... ;)

i <script> skal jeg putte indholdet af en variable ned i et inpud-felt ved navn "txtClientOffset".

Hvordan gør jeg det?


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>

</title>

    <script language="JavaScript" type="text/javascript">
        var visitortime = new Date();
        /*Put visitortime i txtClientOffset*/
    </script>

</head>
<body>
    <form name="form1" method="post" action="Default.aspx" id="form1">

    <div>
        Offset:
        <input name="txtClientOffset" type="text" id="txtClientOffset" />
    </div>
    </form>

</body>
</html>
Avatar billede erikjacobsen Ekspert
17. marts 2009 - 19:26 #1
Du kan måske erstatte
  /*Put visitortime i txtClientOffset*/
med
  document.getElementById("txtClientOffset").value=visitortime;
MEN du kan først gøre det, når feltet findes, og det gør det først senere. Du bør derfor ændre til
 
    <script language="JavaScript" type="text/javascript">
        function aksdh() {
        var visitortime = new Date();
        document.getElementById("txtClientOffset").value=visitortime;
        }
    </script>

og så

<body onload="aksdh()">
Avatar billede chrisbuchholz Nybegynder
17. marts 2009 - 19:29 #2
er det ikke en del snillere og pænere (inline javascript er en stor skam) at gøre det sådan her?:

window.onload = function() {
document.getElementById('txtClientOffset').value = visitortime;
};
Avatar billede evilkneivel999 Nybegynder
17. marts 2009 - 19:37 #3
Jeg siger mange tak! :)
Avatar billede erikjacobsen Ekspert
17. marts 2009 - 19:41 #4
"En stor skam" ... hehe :)  Jo da, det er pænere på din måde Chris. Og så vil man samtidig kunne gøre det således at man nemt kan have flere onload-handlere i forskellige stumper javascript.
Avatar billede olebole Juniormester
17. marts 2009 - 23:23 #5
<ole>

- og skal det være skum i stedet for skam, skal det vel være noget i stil med dette  =)

function setEvent(oObj, sType, fn) {
    if (oObj.addEventListener) oObj.addEventListener(sType, fn, false);
    else if (oObj.attachEvent) oObj.attachEvent("on"+sType, fn);
    else if (typeof oObj["on"+sType]=="function") {
        var fnTmp = oObj["on"+sType];
        oObj["on"+sType] = function() {
            fnTmp.apply(oObj, arguments);
            fn.apply(oObj, arguments);
        };
    }
    else oObj["on"+sType] = fn;
}

function foo() {
    document.getElementById('txtClientOffset').value = visitortime;
}
setEvent(window, "load", foo);

/mvh
</bole>
Avatar billede evilkneivel999 Nybegynder
17. marts 2009 - 23:39 #6
lol! Now that is just showing off! :D
Avatar billede olebole Juniormester
17. marts 2009 - 23:45 #7
Hehe - måske, men den har nu sine fordele ... watch  ;o)

Chris >> Nu ved jeg fra tidligere tråde, du er interesseret i at lære - og i øvrigt har bakset med this i forskellige scopes - så her følger lige en lille diskusion af ovenstående:

Ofte ses denne konstruktion anvendt:
    else if (typeof oObj["on"+sType]=="function") {
        var fnTmp = oObj["on"+sType];
        oObj["on"+sType] = function() {
            fnTmp();
            fn();
        };
    }

- men derved sendes evt. argumenter ikke med. Det betyder bl.a, at handler funktionen ikke modtager event objektet i Firefox o.a.

En anden ting er event scoping. Prøv funktionen setEvent med begge konstruktioner og sæt en click handler på et HTML-element.
Lad så din handler funktion alert'e this, og du vil finde ud af, der kun sker, hvad du forventer ved brug af apply ... this peger på elementet  ;o)
    https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Function/apply

Du kunne også bruge call, men så kan du ikke sende de oprindelige argumenter med som arguments
    https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Function/call
Avatar billede olebole Juniormester
17. marts 2009 - 23:50 #8
"Det betyder bl.a, at handler funktionen ikke modtager event objektet i Firefox o.a." >> Nu har Firefox vist i hele sin levetid understøttet addEventListener - men så i ældre browsere, der ikke understøtter DOM-metoden  =)
Avatar billede erikjacobsen Ekspert
17. marts 2009 - 23:51 #9
Og lige for at komme ned på jorden igen ... i spørgerens konkrete problem er der ikke brug for event-objektet.
Avatar billede olebole Juniormester
18. marts 2009 - 00:15 #10
Erik >> Nej, men netop i forbindelse med dit eget argument "at man nemt kan have flere onload-handlere i forskellige stumper javascript." gør funktionen det endnu lettere  =)

I øvrigt scoper IE og FF forskelligt, så funktionen bør se sådan ud:

function setEvent(oObj, sType, fn) {
    if (oObj.addEventListener) oObj.addEventListener(sType, fn, false);
    else if (oObj.attachEvent) oObj.attachEvent("on"+sType, function(){fn.apply(oObj)});
    else if (typeof oObj["on"+sType]=="function") {
        var fnTmp = oObj["on"+sType];
        oObj["on"+sType] = function() {
            fnTmp.apply(oObj, arguments);
            fn.apply(oObj, arguments);
        };
    }
    else oObj["on"+sType] = fn;
}
Avatar billede erikjacobsen Ekspert
18. marts 2009 - 00:18 #11
Helt enig, Ole. Men man skal passe på med de højere luftlag - der er mystiske bakterier: http://science.slashdot.org/article.pl?sid=09/03/17/1234227

Og mit indspark var egentlig til spørgeren, så han kan stoppe læsningen ca. kl. 20.00.
Avatar billede evilkneivel999 Nybegynder
18. marts 2009 - 00:27 #12
Jeg siger tak for de mange gode input - også de lidt langhårede. Jeg endte med at implementere chrisbuchholz løsning, fordi det er langt lettere når man bruger master-pages i asp.net.
Avatar billede chrisbuchholz Nybegynder
18. marts 2009 - 00:29 #13
Ah - det er jo bade skide smart, Ole! Det sætter jeg sku pris på!:D
Og fordi jeg ved at du vil trække på smilebåndet af dette, så fyrer jeg den her af:

Faktisk, så bør setEvent(window, "load", foo); være (function() { setEvent(window, "load", foo); })(); da man aldrig bør fyrer ting af i det globale scope. De skal adopteres dertil, hvis de skal være globale.

:)
Avatar billede olebole Juniormester
18. marts 2009 - 01:00 #14
Erik >> En bakterie fra outer space er blot en ven, du endnu ikke har mødt. Klap du bare en spand Gevalia på ildstedet!  :)
Og hvem ved, hvilke underværker sådan en lille fyr kan gøre for en flakon af det hvide, hvis den drikker sig lystig med en gærsvamp med fælles afkom til følge?  ;o)

Chris >> Jeg tror nu, du har misforstået den i webkredse pågående diskusion om "forurening af JS' globale scope" en lille smule. Der er ikke noget vundet ved dén konstruktion.

Man kan derimod f.eks. pakke variabler, der bruges af visse funktioner ind i en closure, så de ikke roder rundt i det globale scope - hvilket nu om stunder ofte anvendes i forbindelse med JS-frameworks. Her er fooBar det eneste footprint, der sættes i det globale scope:

(function(){
    var nCount = 0;
    function foo(n) {
        return n + (++nCount);
    }
    window.fooBar = foo;
})();

alert(fooBar(23));
alert(fooBar(23));
alert(fooBar(23));

Variablen nCount hører sammen med funktionen foo i en closure og kan ikke 'ses' i det globale scope. fooBar i det globale scope referer så til foo - hvorved variablen bliver 'privat' for funktionen.
Avatar billede chrisbuchholz Nybegynder
18. marts 2009 - 11:34 #15
Nu vil jeg ikke begynde at diskute det med dig, Ole, men det _er_ mere case-sikkert og leak-hegnet at pakke det ind i funktioner, og så virker det også mere overskueligt når man kigger på det -> det synes jeg ihvertfald.
Avatar billede olebole Juniormester
18. marts 2009 - 13:01 #16
Jeg ville nok være lidt mere forsigtig med påstandende. Jeg er ikke sikker på, hvad du mener med 'case-sikkert' eller 'leak-hegnet' - men jeg har mine anelser  ;o)

Closures har altid været en pest i IE, hvor de i forbindelse med circular references altid har været herostratisk berømt for at skabe i oceaner af alvorlige memory-leaks!
Dog har MS fået bugt med de fleste af disse fejl, men netop 'closure' er et begreb, der generelt er tæt og ubehageligt associeret med begrebet 'memory-leaking'.

Jeg er helt overbevist om, der er noget, du har misforstået  =)
Avatar billede chrisbuchholz Nybegynder
18. marts 2009 - 13:12 #17
Så er det da ihvertfald godt, at du kan oplyse mig om det, Ole. Ydermere synes jeg at du bør tage og spare lidt på tiden du bruger på eksperten, og bruge mere tid på at få gjort den nye version af dengodekode.dk færdig, så din kunnen faktisk kan spredes og komme ud til mere end de 2-3 stykker der læser i hver tråd.
Avatar billede olebole Juniormester
18. marts 2009 - 13:18 #18
Det er ikke helt den samme tid, jeg bruger på de to. Eksperten-kommentarer kan jeg stoppe ind mellem arbejde - og de bliver ofte brugt som et lille 'friminut'. Det andet er et projekt, der kræver god, sammenhængende tid  =)
Avatar billede chrisbuchholz Nybegynder
18. marts 2009 - 13:30 #19
Men jeg synes stadigvæk du skal sparke lidt mere tid i det projekt!
Avatar billede olebole Juniormester
18. marts 2009 - 13:42 #20
Det ved jeg!  ;D
Avatar billede evilkneivel999 Nybegynder
30. marts 2009 - 19:04 #21
erik svarede først, men vil ikek ha point.
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