Avatar billede sebjlan Nybegynder
07. februar 2006 - 21:51 Der er 15 kommentarer og
1 løsning

Dynamisk ur

Hej,

Jeg har lånt scriptet fra dette spørgsmål http://www.eksperten.dk/spm/263271 og kun brugt det til at få tiden vist. (Det virker iøvrigt ikke i Firefox, hvilket jeg evt. godt kunne tænke mig at få løst også, hvis nogen gad :) ).

Men mit problem kommer her: Jeg vil gerne have, at nedenunder mit ur vises en tekst, hvori der står fx "Beskeden sendes kl.: xx:xx:xx". Den tid der skal vises er så den _nuværende_ tid plus 6 sekunder. Hvis klokken fx er 21:59:57 så skal der stå "Beskeden sendes kl.: 22:00:03". Og den skal ikke være dynamisk.

På forhånd tak
Avatar billede tjp Mester
08. februar 2006 - 04:19 #1
Når du trykker på knappen i nedenstående side får du din besked:

<html>
<script>
function getTimeStamp(s){
  var dt = new Date();
  if (s != 0 && !isNaN(s)) {
    dt = new Date(dt.valueOf() + s * 1000);
  }

  var hour = dt.getHours();
  var minute = dt.getMinutes();
  var second = dt.getSeconds();
  //So that **:0*:** doesn't look like **:*:**
  if (minute < 10){
    minute = "0" + minute;
  }
  //So that **:**:0* doesn't look like **:**:*
  if (second < 10){
    second = "0" + second;
  }
  //Create Message
  return "Beskeden sendes kl.:  " + hour + ":" + minute + ":" + second + " ";
}

function setInnerHTML(objectId, strText) {
  objString = 'theObj = document.getElementById("'+objectId+'")';
  eval(objString);
  theObj.innerHTML = strText;
}

</script>
<body>
<span id="msghere">
</span>
<form>
<input type="button" onclick="java script: setInnerHTML('msghere',getTimeStamp(6))" value="Send!">
</form>
</body>
</html>
Avatar billede sebjlan Nybegynder
08. februar 2006 - 07:49 #2
Herligt :) !
Avatar billede roenving Novice
08. februar 2006 - 14:16 #3
>>tjp

-- du bruger et par uhensigtsmæssigheder:

-- for det første er det smartest at hente den korrekte funktion, når man skal have tiden, så er scriptet mere læseligt:

function getTimeStamp(s){
  var dt = new Date();
  if (s != 0 && !isNaN(s)) {
    dt = new Date(dt.getTime() + s * 1000);
  }

-- og så et dumt at benytte en af de mest ressourcekrævende javascript-ting, nemlig eval ...

-- i dette tilfælde er det endda fuldstændigt overflødigt:

function setInnerHTML(objectId, strText) {
  document.getElementById(objectId).innerHTML = strText;
}

-- at det så kan være smart at gøre det en anelse anderledes, så det er fremtidssikret er så noget andet, nemlig f.eks.

function setInnerHTML(objectId, strText) {
  document.getElementById(objectId).firstChild.nodeValue = strText;
}

-- og:

<span id="msghere">&nbsp;</span>

-- og så bruger du på en helt misforstået måde java script: pseudoprotokollen, som kun hører hjemme i src og hrefs, hvor der ellers kan stå en url, for det er selvfølgelig ikke nødvendigt at fortælle javascript-fortolkeren, at den skal tolke script, der står i en script-event som script !-)

-- så væk med den !o]

-- og en enkelt forbedring mere kunne jeg også sætte ind to steder, så det samlet bliver:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<script>
function getTimeStamp(s){
  var dt = new Date();
  if (s != 0 && !isNaN(s)) {
    dt = new Date(dt.getTime() + s * 1000);
  }

  var hour = dt.getHours();
  var minute = dt.getMinutes();
  var second = dt.getSeconds();
  return "Beskeden sendes kl.:  " + hour + ":" + (minute>9?"":"0") + minute + ":" +  (second>9?"":"0") + second + " ";
}

function setInnerHTML(objectId, strText) {
  document.getElementById(objectId).firstChild.nodeValue = strText;
}

</script>
<body>
<span id="msghere">&nbsp;</span>
<form>
<input type="button" onclick="setInnerHTML('msghere',getTimeStamp(6))" value="Send!">
</form>
</body>
</html>
Avatar billede sebjlan Nybegynder
08. februar 2006 - 16:08 #4
Hvofor kan jeg ikke få scriptet til at skrive "Beskeden sendes kl.: xx:xx:xx", når siden loader ved at indsætte følgende nederst i scriptet?

onload = setInnerHTML("msghere", getTimeStamp(10));

Jeg vil ikke have, at man skal trykke på en knap først.
Avatar billede roenving Novice
08. februar 2006 - 16:14 #5
-- fordi du ikke kan sætte en event lig med noget, der drekte udføres, kun noget anonymt, så du skal:

window.onload = function(){setInnerHTML("msghere", getTimeStamp(10));};
Avatar billede sebjlan Nybegynder
08. februar 2006 - 16:21 #6
Tak, det virker, men aaargh.. jeg vil have at både uret og "Beskeden sendes kl.:" skal vises, så jeg har skrevet:

window.onload = function(){thetime();};
window.onload = function(){setInnerHTML("msghere", getTimeStamp(10));};

til slut, men det virker selvfølgelig ikke :/
Avatar billede roenving Novice
08. februar 2006 - 16:28 #7
window.onload = function(){setInnerHTML("msghere", getTimeStamp(10));thetime();};
Avatar billede sebjlan Nybegynder
08. februar 2006 - 19:03 #8
Tak! :)

Vil du have point?
Avatar billede tjp Mester
09. februar 2006 - 01:00 #9
>>roenving

Det helt fint at du kommer med forbedringsforslag og sådan, men til gengæld har du en ret uhensigstmæssig måde at kommunikere på:

">>tjp"
"...for det første er det smartest...",
"...dumt at benytte...",
"...endda fuldstændigt overflødigt...",
"...en helt misforstået måde...".

Hvem fanden har pisset på din sukkermad???

Nu bygger det meste af scriptet jo lissom på spørgsmålets oprindelige script, så der melder jeg hus forbi, og brugen af 'eval' fandt jeg på nettet og syntes den var sjov at have med. Og desuden kan det vel diskuteres om 'getTime()' er så meget mere intuitiv end 'valueOf()'.

Min idé med at svare her på Eksperten, er at holde mig programmeringsmæssigt i gang, dvs. komme rundt i krogene og prøve lidt af hvert, og det vil jeg egentlig gerne have lov til, også fremover, og helst uden at skulle have en spand l... i hovedet en anden gang.
På forhånd tak!
Avatar billede roenving Novice
09. februar 2006 - 01:26 #10
-- øeh, whaddd ...

-- min indledning med at adressere dig med ">>tjp" er helt bevidst for ikke at nogen skal tro, at det er en generel kommentar, men at det handler om at give dig nogle inputs ...

-- og jeg starter også _meget_ bevidst med at påpege at det er uhensigtsmæssigheder, ikke at det er tåbeligt eller fejl !o]

-- resten vil jeg helt klart stå ved, og hvis du ikke kan anerkende det, synes jeg, at du virkelig skal google en hel masse mere (eller gennemtrawle denne kategori !o]

PS. Jeg skriver ikke kommentarer til spørgsmål (og slet ikke til spørgsmål, som har fået en brugbar løsning !-), for at genere folk, men for at understøtte Ekspertens grundlag om vidensdeling på det mest kvalificerede grundlag ...
Avatar billede tjp Mester
09. februar 2006 - 03:29 #11
Jamen, jeg har skam intet mod dine inputs - de var generelt helt ok. Det er simpelthen ordene du serverede dem med, der pisser mig af. Jeg vil mene, at "vidensdeling på det mest kvalificerede grundlag" sagtens kan klares uden at benytte en serie adjektiver a la "dumt...fuldstændigt overflødigt...helt misforstået". That's all! ;-)
Avatar billede tjp Mester
09. februar 2006 - 03:31 #12
Hov, jeg mener 'adverbier'! ;-)
Avatar billede roenving Novice
09. februar 2006 - 11:51 #13
-- jamen, jeg mener helt alvorligt, at det er dumt at benytte eval, specielt, når den er helt overflødig, en rimelig sammenligning ville være at bestille en 70 personers luksusbus i Aalborg for at fragte tre fra Hovedbanegården til Rådhuspladsen i København !-)

-- det er spild af tid og gode kræfter, og det er altså sådan noget, jeg betegner som dumt, for for det første kan de tre mennesker sagtens være i en almindelig bil, og der holder taxaer foran Hovedbanegården, og gåturen på 3-5 minutter kan ofte være hurtigere end noget andet ...

-- og misforståelsen omkring brugen af java script: pseudoprotokollen er netop meget udbredt, hvorfor det alene fra min side inden for det sidste år er blevet til omkring en rettelse hver eneste dag !o]

-- tjah, måske er det mere rimeligt at bestille bussen i Ballerup ...
Avatar billede sebjlan Nybegynder
09. februar 2006 - 15:27 #14
Jeg ved ikke, om det er bedst at oprette en ny tråd omkring dette, men kan nogen af jer fortælle mig, hvorfor uret (det script, som jeg har henvist til øverst) ikke virker i Firefox og eventuelt fortælle mig, hvordan jeg kan få det til at virke deri?
Avatar billede roenving Novice
09. februar 2006 - 16:56 #15
Fordi der forsøges at skrive til et objekt, der faktisk findes i IEs DOM (Document Object Model !-), men overhovedet ikke findes i W3Cs rekommendation til en browser-DOM, og derfor ikke findes ret mange steder ...

-- hverken Geckoerne (Mozilla, FireFox, Netscape, Camino m.m.fl.) eller f.eks. Safari understøtter dette (men Opera gør !-)

-- og det er linjen:

//Write Message
timehere.innerHTML = finalthing;

-- der skal skrives sådan:

//Write Message
document.getElementById("timehere").innerHTML = finalthing;

for at det virker i samtlige nutidige browsere !o]
Avatar billede sebjlan Nybegynder
09. februar 2006 - 21:02 #16
Tusind tak, det virker :)

Vil du ikke have nogle point for al den hjælp du har givet i denne tråd?
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