Permalänk
Hedersmedlem
Skrivet av Yxskaftet:

<img id="trigger" src="https://www.google.se/images/srpr/logo11w.png" alt="Click me" /> <p id="target">Some random text</p> <script> (function() { document.getElementById('trigger').onclick = function() { var target = document.getElementById('target'); target.style.display = target.style.display === 'none' ? 'block' : 'none'; } })(); </script>

I kommenterandets och diskussionens namn så skulle jag då vilja skippa den "självstängande" taggstilen på `<img>`-taggen: det har ingen som helst effekt om man inte skriver XHTML, vilket i sig vanligen inte är att rekommendera idag.

Jag skulle också vilja flytta definitionen av `target` utanför den inre funktionen för att undvika att webbläsaren ska behöva parsa DOM varje gång bilden klickas för att hitta `target`-elementet. Dessutom är det ofta trevligt för läsbarheten att inte "stapla" alltför många anrop på varandra, så jag skulle även flytta ut `trigger` separat. Inget av detta ger några hastighetsbekymmer i vilket fall i ett sådant här enkelt fall, men det ser logiskt bättre ut, i mina ögon.

object.onclick() är inte så poppis idag av flera anledningar (se "Notes"), till fördel för addEventListener(), vilket ej heller skiljer sig speciellt mycket kodmässigt men är en bättre vana.

Ett komplett testdokument:

<!doctype html> <meta charset="utf-8"> <title>Test</title> <img id="trigger" src="https://www.google.se/images/srpr/logo11w.png" alt="Click me"> <p id="target">Some random text <script> (function() { var trigger = document.getElementById('trigger'), target = document.getElementById('target'); trigger.addEventListener('click', function(e) { target.style.display = target.style.display === 'none' ? 'block' : 'none'; } ); })(); </script>

där jag även minimerat användningen av "onödiga" (valbara) taggar, vilket säkert provocerar någon .

Det som troligen är mest "magi" i koden för någon som inte sett så mycket Javascript innan är inneslutningen `(function() {…})();` som ser rätt märklig ut. Ett sätt att initialt behandla detta är att acceptera att det "låser in" det som är innanför klamrarna i en egen kontext, och att det generellt är bra programmeringspraxis att separera kodstyckan så att de inte "smutsar ner" globalt (jag ser det snarare som en fråga om varför jag inte ska använda sådan separation i ett visst fall än varför jag ska göra det). Det är ett väldigt vanligt använt "mönster" i Javascript. Vill man ha större inblick i vad som händer så kan man söka efter nyckelorden "closure" och "self-invoking function".

JSFiddle av ovanstående för enkla tester ifall någon vill modifiera något.

Visa signatur

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

Permalänk
Skrivet av phz:

Ett komplett testdokument:

<!doctype html> <meta charset="utf-8"> <title>Test</title> <img id="trigger" src="https://www.google.se/images/srpr/logo11w.png" alt="Click me"> <p id="target">Some random text <script> (function() { var trigger = document.getElementById('trigger'), target = document.getElementById('target'); trigger.addEventListener('click', function(e) { target.style.display = target.style.display === 'none' ? 'block' : 'none'; } ); })(); </script>

En stängd img-tagg är väl inte så mycket att kommentera, markupen blev som editorn formaterade den då jag inte tyckte html'en var fokus.
Själv stänger du aldrig din p-tagg, annars ser JavaScriptet definitivt bättre ut!

Permalänk
Hedersmedlem
Skrivet av Yxskaftet:

Själv stänger du aldrig din p-tagg, annars ser JavaScriptet definitivt bättre ut!

Det var en av de där valbara taggarna som jag antog skulle provocera . HTML Living Standard: 12.1.2.4 Optional tags — minst att jag skrivit om valbara taggar tidigare på forumet.

Visa signatur

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

Permalänk
Medlem
Skrivet av Yxskaftet:

Det är aldrig någonsin en bra lösning att ha sin html-markup i JavaScript.
Några anledningar förutom de självklara:
Tänk om användaren har JS avaktiverat, då blir sidan tom?

När jag utbildade mig inom JavaScript så hade vi en lärare som var JavaScript-expert. Jag frågade honom faktiskt samma sak, tänk om användaren har inaktiverat JavaScript? Är det verkligen klokt att använda JavaScript för att navigera / se innehåll på sidan?

Enligt honom så är det bara att köra på. Hans argument var att för det första så är det en liten minoritet som avaktiverar JavaScript, och för det andra så får användaren skylla sig själv om man avaktiverar det, för vad en användare väljer att avaktivera på sin dator kan inte webbutvecklaren ta ansvar för. Kräver hemsidan JavaScript så får användaren helt enkelt aktivera det för den sidan.

Jag håller faktiskt med honom och kör på det spåret. Sen har säkert folk ändå olika åsikter om det.

Skrivet av Yxskaftet:

Hur ska sökmotorerna få tag på texten?

Det är en nackdel ja, förutom om det handlar om nån liten text som "Hejsan!". Men handlar det om större mängder text så är det absolut en nackdel.

Skrivet av Yxskaftet:

För övrigt var det inte min mening att verka stötig, ber om ursäkt om det uppfattades så.

Och jag ber om ursäkt att jag också svarade lite otrevligt förut

Permalänk
Hedersmedlem
Skrivet av Scriptis:

När jag utbildade mig inom JavaScript så hade vi en lärare som var JavaScript-expert. Jag frågade honom faktiskt samma sak, tänk om användaren har inaktiverat JavaScript? Är det verkligen klokt att använda JavaScript för att navigera / se innehåll på sidan?

Enligt honom så är det bara att köra på. Hans argument var att för det första så är det en liten minoritet som avaktiverar JavaScript, och för det andra så får användaren skylla sig själv om man avaktiverar det, för vad en användare väljer att avaktivera på sin dator kan inte webbutvecklaren ta ansvar för. Kräver hemsidan JavaScript så får användaren helt enkelt aktivera det för den sidan.

Jag håller faktiskt med honom och kör på det spåret. Sen har säkert folk ändå olika åsikter om det.

Om man gör en sida som verkligen behöver Javascript för sin grundläggande funktionalitet så är det ju inte mycket att säga om: har användaren inte stöd för den typen av Javascript så är det kört. Om det däremot handlar om saker som att animera en schysst dropdowneffekt och liknande så är det i mina ögon närapå tjänstefel att "kräva" Javascript.

Dels är det ofta bra att hålla gränssnitt enhetliga, så att en användare direkt kan känna sig van vid navigering och annat, snarare än att bli "överraskad" på varenda sida för att de löser saker annorlunda, och dels har det ofta negativa konsekvenser för tillgänglighet för exempelvis personer som behöver använda skärmläsare och annat. Ovanpå detta kan man lägga sökmotorernas robotar som ska kunna läsa och förstå sidan maskinellt för att sortera innehållet, vilket kan bli omöjligt med alltför mycket inbäddad Javascript som gör lite av varje.

Jag skulle alltid vara väldigt restriktiv med användningen av Javascript. Använd det där det kan ge extra funktionalitet — exempelvis sortera en tabell snabbt, ge möjlighet för utökad tangentbordsnavigering (men bråka inte med webbläsarens standardgenvägar), visuellt hjälpsamma animeringar, ge snabbare och mer bandbreddsbesparande uppdateringar, etc. — men att stänga ute en användare helt från sidan bara för att man vill ha animerade menyer tycker jag personligen är väldigt fel, även om det är en liten procent man påverkar. Jag tror det är lite av en "generationsfråga", och jag tillhör allmänt skaran som ser en informativ webb som en målbild, så jag vet att det finns många avvikande åsikter.

Visa signatur

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

Permalänk
Medlem
Skrivet av phz:

object.onclick() är inte så poppis idag av flera anledningar (se "Notes"), till fördel för addEventListener(), vilket ej heller skiljer sig speciellt mycket kodmässigt men är en bättre vana.

Jag har läst att addEventListener är "utdöende" och att man inte bör göra på det sättet i JavaScript. Men jag har ändå alltid kört på det då jag är vanast med det.

Skoj att se källorna jag hört det ifrån tydligen hade fel

Permalänk
Skrivet av Scriptis:

När jag utbildade mig inom JavaScript så hade vi en lärare som var JavaScript-expert.

JavaScript-expert! Inte dåligt, vad gör att man räknas som det?
Jag vet inte riktigt vad jag mer kan säga.
Vi är nu flera som försökt förklara att man inte ska ha html-markup i JavaScript, men du verkar vägra inse att det stämmer.

Permalänk
Medlem
Skrivet av phz:

Om man gör en sida som verkligen behöver Javascript för sin grundläggande funktionalitet så är det ju inte mycket att säga om: har användaren inte stöd för den typen av Javascript så är det kört. Om det däremot handlar om saker som att animera en schysst dropdowneffekt och liknande så är det i mina ögon närapå tjänstefel att "kräva" Javascript.

Dels är det ofta bra att hålla gränssnitt enhetliga, så att en användare direkt kan känna sig van vid navigering och annat, snarare än att bli "överraskad" på varenda sida för att de löser saker annorlunda, och dels har det ofta negativa konsekvenser för tillgänglighet för exempelvis personer som behöver använda skärmläsare och annat. Ovanpå detta kan man lägga sökmotorernas robotar som ska kunna läsa och förstå sidan maskinellt för att sortera innehållet, vilket kan bli omöjligt med alltför mycket inbäddad Javascript som gör lite av varje.

Jag skulle alltid vara väldigt restriktiv med användningen av Javascript. Använd det där det kan ge extra funktionalitet — exempelvis sortera en tabell snabbt, ge möjlighet för utökad tangentbordsnavigering (men bråka inte med webbläsarens standardgenvägar), visuellt hjälpsamma animeringar, ge snabbare och mer bandbreddsbesparande uppdateringar, etc. — men att stänga ute en användare helt från sidan bara för att man vill ha animerade menyer tycker jag personligen är väldigt fel, även om det är en liten procent man påverkar. Jag tror det är lite av en "generationsfråga", och jag tillhör allmänt skaran som ser en informativ webb som en målbild, så jag vet att det finns många avvikande åsikter.

Bra skrivet och tänkt, det är intressant att höra hur olika personer ser på saken
Inte så mycket mer att tillägga för min del här, annat än att jag kan också hålla med och förstå mycket av vad du skrev.

Skrivet av Yxskaftet:

JavaScript-expert! Inte dåligt, vad gör att man räknas som det?

Jag vet faktiskt inte varför han kallades det. Expert är väl en person som har specialiserat och fördjupat sig mycket på ett speciellt område skulle jag tro? Han hade tydligen utvecklat alla möjliga applikationer i JavaScript innan han blev lärare. Känner inte till hans bakgrund så bra dock.

Skrivet av Yxskaftet:

Vi är nu flera som försökt förklara att man inte ska ha html-markup i JavaScript, men du verkar vägra inse att det stämmer.

Fortfarande finns det inget som hindrar mig från att göra det.

Beror ju också på hur seriös hemsidan man gör är. Jag lägger t.ex. inte in HTML-markup i JavaScript kod om jag utvecklar en sida för ett företag, då dem gärna vill att den ska följa dem gyllene reglerna.

Sen kan det vara lärorikt / kul att göra så i utbildningssyfte, då OP vill lära sig JavaScript. Det är nyttigt att se exempel på hur kraftfullt JavaScript är och vad man kan göra med språket, oavsett hur bra praktiskt det är eller ej.

Permalänk
Skrivet av Scriptis:

Fortfarande finns det inget som hindrar mig från att göra det.

Sen kan det vara lärorikt / kul att göra så i utbildningssyfte, då OP vill lära sig JavaScript. Det är nyttigt att se exempel på hur kraftfullt JavaScript är och vad man kan göra med språket, oavsett hur bra praktiskt det är eller ej.

Ska man visa hur kraftfullt JavaScript är så ska man väl inte visa dåliga sätt att använda det på? Det du visade var ju verkligen inte kraftfullt?
Nej, det finns inget som hindrar dig.
Jag får väl vara glad att du inte tillverkar bilar eller nått.
Jag menar, det går alldeles utmärkt att göra bromsskivor av ost. Att det sen är ett fruktansvärt dåligt sätt att göra det på hade ju inte hindrat dig.
Jag ger upp.

Permalänk
Medlem
Skrivet av Yxskaftet:

Jag får väl vara glad att du inte tillverkar bilar eller nått.
Jag menar, det går alldeles utmärkt att göra bromsskivor av ost. Att det sen är ett fruktansvärt dåligt sätt att göra det på hade ju inte hindrat dig.

Yes! Jämför bilar med hemsidor, bra jämförelse.

Skrivet av Yxskaftet:

Jag ger upp.

Bra, då får vi äntligen ett slut på denna diskussion.