Permalänk
Medlem

Javascript Byt ut texten ?

Hej ! , jag har lite problem att få mitt javascript att fungera.

Tanken är som ni ser att texten i span taggen ska bytas ut, men det vill tydligen inte fungera för mig, kan man få en hint om vad som gått snett ?

<DOCTYPE! html> <html> <head> </head> <body onload="sMessage()"> <span id="sM"> hello </span> <script type="text/javascript"> function sMessage() { var x = document.getElementById(sM); x.innerTEXT = "File upload successful !"; setTimeout("revertSuccessMessage", 5000); } function revertSuccessMessage() { var x = document.getElementById(sM); x.innerTEXT = "Choose a file to upload !"; } </script> </body> </html>

Visa signatur

// Lian Li PC-888 // i7 4790s // MSI vega 56 8gb O.C. // 16GB //

Permalänk
Medlem

1. Lägg script taggen inom head taggen!
2. Det är fel i koden för getElementById(sM), googla, det är jätteenkelt att hitta svaret, men tänk på detaljerna!
3. Det är fel i koden för x.innerTEXT, googla igen, hint, HTML.
4. Det är fel i koden för setTimeout(..., googla åter igen, hint "".

Jag skriver inte detta för att vara elak, utan för att det är viktigt för din egen del att använda böcker/google för att hitta svaret på din fråga.

Permalänk
Medlem

http://www.w3schools.com/ kan va ett tips att kolla om du har problem med dina scripts.

Visa signatur

|CPU: Intel Core i7 8700K |GPU:MSI RTX 2070 |Mobo: ASUS PRIME Z390
|Chassi: Fractal Design |Ram: Corssair 12gb ram |HDD: 500GB samsung SSD
|PSU:
Be quiet! 600W|

Permalänk
Inaktiv
Skrivet av lome:

http://www.w3schools.com/ kan va ett tips att kolla om du har problem med dina scripts.

Finns mycket bättre resurser, till exempel MDN.

Permalänk
Medlem
Skrivet av NickoB:

1. Lägg script taggen inom head taggen!

Script-taggen behöver inte vara inom head-taggen, och bör heller inte placeras där. Ha kvar scripts i slutet av body, detta gör man för att inte blockera renderingen av sidan medan script laddas.

För att återgå till de ursprungliga problemen.

Även om det går att använda en strängversion av setTimeout så är det en form utav eval och ska "aldrig" användas eftersom det föder demoner och liknande, så snälla använd inte det. Ta bort dina citationstecken i setTimeout-anropet och utnyttja first-class functions som tänkt och allt blir frid och fröjd.

Jag vet inte om du glömt citationstecken kring 'sM' i dina getElementById-anrop eller om det beror på något annat, men mitt förslag är att du läser på lite grundläggande om JavaScript istället för att endast googla enstaka problem. På så sätt kan du bidra till bättre script på webben, och komma ett steg närmare att plocka ut dåliga delar av språket och därmed förenkla livet för alla levande varelser. Ett problem enligt mig är den relativt brett utspridda inställningen att JavaScript inte kräver något större förståelse av språket för att användas, vilket i sig är sant, men som samtidigt orsakar en stor mängd dålig kod som dödar träd och lemurer.

Visa signatur

Don't be afraid to give up the good to go for the great.

Permalänk
Medlem

Tack !!. tipsen var till stor hjälp ^_^
jag måste verkligen börja lära mig mera inom javascript känner jag... ..

Visa signatur

// Lian Li PC-888 // i7 4790s // MSI vega 56 8gb O.C. // 16GB //

Permalänk
Medlem
Skrivet av zpruce:

Script-taggen behöver inte vara inom head-taggen

Där har jag uppenbarligen halkat efter - när ändrades den rekommendationen? Förut var det ju en big no-no att pilla in script i body, och validatorer skrek skallen av sig om man råkade göra det. Men det kanske bara gällde html 4 och äldre?

Visa signatur

5950X, 3090

Permalänk
Skrivet av yacuzhi:

Tack !!. tipsen var till stor hjälp ^_^
jag måste verkligen börja lära mig mera inom javascript känner jag... ..

Istället för innerTEXT eller innerHTML kan det vara värt att kolla upp document.createTextNode och appendChild med Du bör dessutom flytta ut scriptet i en extern fil, länka in det i botten av body och köra detta:

window.addEventListener("load", sMessage);

Är du ännu mer ambitiös bör du försöka undvika att lägga din kod i det globala "namespacet" som det blir default

Skrivet av backfeed:

Där har jag uppenbarligen halkat efter - när ändrades den rekommendationen? Förut var det ju en big no-no att pilla in script i body, och validatorer skrek skallen av sig om man råkade göra det. Men det kanske bara gällde html 4 och äldre?

Tror inte rekommendationen har ändrats. Rent allmänt bör det vara ett no-no att lägga in script på detta sätt istället för att lägga dem i en extern fil och sedan länka in dem längst ner i body.

Visa signatur

Silverstone TJ08-E | Seasonic X-750 | Asus ROG STRIX M450-I | AMD Ryzen 3700X | Noctua NH-U12P SE2 | Hyper X 32GB | ASUS Strix GeForce GTX 960 | Samsung 840 EVO 120GB

Permalänk
Hedersmedlem
Skrivet av NickoB:

1. Lägg script taggen inom head taggen!

Skrivet av zpruce:

Script-taggen behöver inte vara inom head-taggen, och bör heller inte placeras där. Ha kvar scripts i slutet av body, detta gör man för att inte blockera renderingen av sidan medan script laddas.

Skrivet av backfeed:

Där har jag uppenbarligen halkat efter - när ändrades den rekommendationen? Förut var det ju en big no-no att pilla in script i body, och validatorer skrek skallen av sig om man råkade göra det. Men det kanske bara gällde html 4 och äldre?

Skrivet av PanicOutPut:

Tror inte rekommendationen har ändrats. Rent allmänt bör det vara ett no-no att lägga in script på detta sätt istället för att lägga dem i en extern fil och sedan länka in dem längst ner i body.

Det är ett par olika effekter som samverkar:

  1. Läggs skripten längst ner så vet man att dokumentets DOM har byggts färdig innan skriptet körs. Många bibliotek förväntar sig detta och det undviker att behöva kontrollera/vänta på att detta ska ha hänt. Det finns också skript som av liknande anledningar behöver laddas innan DOM har börjat byggas upp (t ex Modernizr) och därför ska placeras i <head>.

  2. Antalet parallella resursnedladdningar är ofta kraftigt begränsat (max två per värdnamn rekommenderas i HTTP-specifikationen). Att ladda en extern skriptfil tar en sådan i anspråk, vilket blockerar bilder och och andra resurser som ofta är viktigare att ladda för att kunna rendera sidan.

  3. Om CSS-filer inkluderas efter skriptfiler så kommer CSS-reglerna inte laddas förrän skriptfilerna laddats. Detta, likt punkten ovan, kan leda till s k "flash of unstyled content" vilket försämrar användarupplevelsen.

Att ha skripten i externa filer förenklar också för cachning, speciellt över flera sidor: om en och samma skriptfil återanvänds på samma site (vilket är mycket vanligt) så behöver koden bara laddas hem en gång om det är en extern resurs, men varje gång en ny sida laddas om den är inline. Rent praktiskt är det också dumt att upprepa sin kod på många ställen.

Så: en "best practice" är att lägga skript i externa filer och inkludera dem sist i koden. Vet man varför så finns det dock situationer där man kan (och ibland bör) frångå detta med gott samvete. Det är också riktigt att det förr var "standard" att ha skripten i <head> och ingen brydde sig nämnvärt, men det var innan Javascriptanvändandet exploderade i en stor "Web 2.0"-orgie. Numera är de överallt och slöar ner användares webbläsare och skapar inkonsekventa gränssnitt, vare sig det behövs eller ej .

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Medlem
Skrivet av phz:

Så: en "best practice" är att lägga skript i externa filer och inkludera dem sist i koden. Vet man varför så finns det dock situationer där man kan (och ibland bör) frångå detta med gott samvete. Det är också riktigt att det förr var "standard" att ha skripten i <head> och ingen brydde sig nämnvärt, men det var innan Javascriptanvändandet exploderade i en stor "Web 2.0"-orgie. Numera är de överallt och slöar ner användares webbläsare och skapar inkonsekventa gränssnitt, vare sig det behövs eller ej .

Som jag minns det var det explicit standard att placera script i head, därav har jag alltid gjort så. Kan fånigt nog inte hitta någon källa på det dock.

Risken finns att jag blandat ihop det med style-taggar. Jajja. Bättre sent än aldrig att jag fick reda på hur det egentligen ligger till nu då.

Då kommer förstås en följdfråga: varför laddas t.ex. jQuery alltid i head, även på jquery.org? Kanske för att jQuery inte kan vänta tills dom:en är klar?

Visa signatur

5950X, 3090

Permalänk
Medlem
Skrivet av backfeed:

Som jag minns det var det explicit standard att placera script i head, därav har jag alltid gjort så. Kan fånigt nog inte hitta någon källa på det dock.

Risken finns att jag blandat ihop det med style-taggar. Jajja. Bättre sent än aldrig att jag fick reda på hur det egentligen ligger till nu då.

Då kommer förstås en följdfråga: varför laddas t.ex. jQuery alltid i head, även på jquery.org? Kanske för att jQuery inte kan vänta tills dom:en är klar?

jQuery behöver inte alltid laddas i head, så länge det laddas före alla scripts som utnyttjar det. Det är dock relativt vanligt att alla scripts placeras i head trots att detta ofta inte är optimalt. Det finns sätt att ladda script parallellt med parsern via exempelvis async eller defer som dock inte alla webbläsare stödjer. Man kan också ladda scripts parallellt via javascript för att sedan appenda dessa till head allt eftersom de laddats klart, på så sätt kan det se ut som att de inkluderats som vanligt i head men snarare lagts till i efterhand med olika knep. Det är möjligt att jQuerys hemsida utnyttjar något sådant knep, alternativt helt enkelt skulle gå att optimera vad gäller laddning av scripts.

Här finns lite mer detaljer.
Här kan man se att jQuery kan inkluderas i slutet av body.

Visa signatur

Don't be afraid to give up the good to go for the great.

Permalänk
Medlem
Skrivet av backfeed:

Som jag minns det var det explicit standard att placera script i head, därav har jag alltid gjort så. Kan fånigt nog inte hitta någon källa på det dock.

Risken finns att jag blandat ihop det med style-taggar. Jajja. Bättre sent än aldrig att jag fick reda på hur det egentligen ligger till nu då.

Då kommer förstås en följdfråga: varför laddas t.ex. jQuery alltid i head, även på jquery.org? Kanske för att jQuery inte kan vänta tills dom:en är klar?

Även jQuery bör laddas sist. Ett undantag kan vara om du använder t.ex. jQuery UI eller liknande som påverkar DOM.

Permalänk
Hedersmedlem
Skrivet av backfeed:

Som jag minns det var det explicit standard att placera script i head, därav har jag alltid gjort så. Kan fånigt nog inte hitta någon källa på det dock.

Risken finns att jag blandat ihop det med style-taggar. Jajja. Bättre sent än aldrig att jag fick reda på hur det egentligen ligger till nu då.

På samma sätt som man inte bör nästla in speciellt mycket PHP-logik mitt i dokument för överblickens skull så var det naturligt att samla alla externa resurser "högst upp" av konvention. Dock så trumfade de praktiska fördelar jag nämnde den existerande konventionen och skapade helt enkelt en ny. Det medför egentligen inget problem, eftersom skriptfilerna fortfarande har en "dedikerad plats".

Så det fanns anledningar till den tidigare konventionen, och det finns anledningar till den "nya". Man kan notera att man genom att ha skripten längst ner slipper en hel del `onLoad`/`DOMContentLoaded`/etc.-kontroller för att få skripten att göra som man vill, men det starkaste argumentet skulle jag säga brukar vara prestandan gällande resursladdning (utöver att man aldrig bör ha det innan extern CSS, men det "gällde" även tidigare).

Skrivet av backfeed:

Då kommer förstås en följdfråga: varför laddas t.ex. jQuery alltid i head, även på jquery.org? Kanske för att jQuery inte kan vänta tills dom:en är klar?

   Följ konventionen tills konventionen inte går att följa — Nytt djungelordspråk

Det kan vara av praktiska skäl så som templatesystem som bäddar in Javascriptanrop mitt i dokumentet utan möjlighet att ändra utan större omskrivningar, eller kanske någon form av AJAX-fält som kan vilja använda Javascriptbiblioteken innan hela dokumentet hunnit laddas. Det är möjligt att de har goda skäl att göra som de gör. Det är också möjligt att de inte bryr sig om "best practices" i detta fall; åtminstone inte när sidan skrevs.

En notis är också att skäl 2 i mitt förra inlägg — att externa resurser delar på två anslutningar — som jag skrev bara gäller per värdnamn, så om man använder t ex Googles CDN för Jquery så skapar det en ny anslutningstråd. Det är ytterligare ett skäl till att media ofta placeras på separata värdar på större sidor: dokumentet kan laddas snabbt, media fylls i efterhand.

Vad gäller din följdfråga gällande Jquery och DOM så kan sägas att själva biblioteket Jquery inte behöver vänta på att DOM ska vara laddad, för det gör inget aktivt (säger jag utan att ha kollat i koden, så det är upplagt för rättning, men tycker det låter rimligt). Detsamma gäller andra filer som bara tillhandahåller funktioner utan att själv manipulera DOM, så just det argumentet applicerar alltså inte där.

EDIT: Såg att det hade kommit svar under tiden jag skrev, så det blev lite upprepning av mig. Jag håller med om det som skrevs ovan.

En ytterligare notis är att det finns ett attribut som heter `defer` som kan läggas till en skripttagg, som är tänkt att säga till browsern att "detta skript ska vänta med att köras tills DOM är klar", på ett ungefär. Med detta attribut skulle DOM-argumentet kunna skippas gällande skriptplacering, men problemet är att detta attribut inte stöds av alla läsare, vilket i praktiken gör det oanvändbart. Om man laddar denna länk så borde man få alertboxar med texten "1", "2", "3" i tur och ordning om det stöds. Om det inte stöds får man i stället "2", "1", "3". I Opera/Firefox/Chrome får jag det senare (tror faktiskt bara det är IE som stöder `defer`, men har ingen browser tillgänglig för att testa. Bad andra att testa, och för vissa gav IE "rätt" resultat, men inte för alla).

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.