Permalänk
Medlem

Intressant "fel" i JavaScript?

Hej!

Har ett intressant fel (eller snarare inte existerande fel) när jag provar JavaScript. Ok, jag är ganska ny på detta.

Det jag vill göra är att skriva ut vart sidan man tittar på finns, dvs den nuvarande adressen, om det finns en #-symbol med ett efterföljande ord så tas denna del bort.

Observera att texten skrivs - och ska skrivas på sidan, inte i adressfältet

Provade med denna kod.

html

<p id="thispage">Länk till denna sida: <a id="pathname" href="#"></a></p>

JS

/* Generate the current address of this page without the # (hash) symbol and subsequent words */ document.getElementById("pathname").innerHTML = location.href.replace(/#.*$/, ''); document.getElementById("pathname").href = location.href.replace(/#.*$/, '');

Resultatet i Firefox är att det fungerar felfritt. Inga anmärkningar / fel / varningar när man felsöker i firefox. Däremot så skriker javaskript editorn och felmarkerar vart enda ord. Även tester på nätet skriker om att det inte är deklarerat etc.

Så vad gör jag för "fel" - Firefox visar precis det resultat jag vill ha.

Med andra ord jag får inget fel, ska jag misstänka editorn som trasig / buggig? Jag får inga anmärkningar i html eller css.

Samtliga ord som är med föreslås av editorn. Vet att location även skrivs window.location, men kan kortas av. Har provat båda.
Har även provat med // som kommentar. Editorn ger // för att växla kommentar och /* */ för att växla en blockkommentar.

Som sagt får inga fel i firefox. Programmet som redigerar är Brackets.

Visa signatur

Server: Fractal design Define 7 XL | AMD Ryzen 7 5800X 8/16 | ASUS ROG CROSSHAIR VIII DARK HERO | 64GB Corsair @ 3000MHz | ASUS Radeon RX 460 2GB | Samsung 960 PRO 512 GB M.2 | 2x 2TB Samsung 850 PRO SSD | 6x Seagate Ironwolf Pro 10TB
WS: Phantex Entoo Elite | AMD Ryzen Threadripper 1950X 16/32 | ASUS Zenith extreme | 128GB G.Skill @ 2400MHz | ASUS Radeon HD7970 | 3x 2TB Samsung 960PRO M.2 | 6x Seagate Ironwolf Pro 10 TB
NEC PA301W 30" @ 2560x1600 | Linux Mint 21.3 Cinnamon

Permalänk
Medlem

"om det finns en #-symbol med ett efterföljande ord så tas denna del bort."

Menar du då att om det står example.com#test så ska den skriva ut #, eller? I sådana fall tror jag att du kommer älska jQuery. Ta en titt på svaren för den här frågan.

Visa signatur

Citera mig om du vill att jag ska hitta till ditt svar.
airikr.me. Andra projekt: Keizai, Koroth & Serenum.

Permalänk
Medlem
Skrivet av OldComputer:

skriker om att det inte är deklarerat etc

Det är bra att posta exakt felmeddelande. Nu gissar jag, men en del verktyg kräver att man specificerar vilka globala variabler man förväntar sig finnas. Man kan t ex välja om man vill ha browser-globals (window, document, location, mfl) eller Node.js-globals eller något helt annat. Du kanske behöver ställa in nåt sånt i Brackets?

Permalänk
Medlem
Skrivet av OldComputer:

Resultatet i Firefox är att det fungerar felfritt. Inga anmärkningar / fel / varningar när man felsöker i firefox. Däremot så skriker javaskript editorn och felmarkerar vart enda ord. Även tester på nätet skriker om att det inte är deklarerat etc.

Så vad gör jag för "fel" - Firefox visar precis det resultat jag vill ha.

Med andra ord jag får inget fel, ska jag misstänka editorn som trasig / buggig? Jag får inga anmärkningar i html eller css.

Webbläsare brukar vara väldigt förlåtande när det gäller mindre felaktigheter i html/css/javascript. Så att något visas som förväntat i en webbläsare betyder inte att detta något är felfritt.

Så det finns säkert fel i din kod, men inget som hindrar Firefox från att köra den.

Den HTML du postade är till exempel långt ifrån ett korrekt HTML dokument, men den blev säkert renderad som du väntade dig ändå.

Permalänk
Medlem
Skrivet av Airikr:

"om det finns en #-symbol med ett efterföljande ord så tas denna del bort."

Menar du då att om det står example.com#test så ska den skriva ut #, eller? I sådana fall tror jag att du kommer älska jQuery. Ta en titt på svaren för den här frågan.

Den delen fungerar som den ska, jag får ett resultat som är https://www.example.com/katalog/sidnamn.html. Vilket är vad jag förväntar mig eftersom den klipper bort (#vad_somhelst_efter_oavasett_längd)

Iden är att om du exempelvis ger länken till min sida med sektionen av pannkakor (https://www.example.com/katalog/sidnamn.html#pannkakor) så kommer det fortfarande bara att stå sidans namn, dvs (https://www.example.com/katalog/sidnamn.html).

Idén med denna är alltså ta bort efterföljande #id och att göra href="#" till href ="https://www.example.com/katalog/sidnamn.html", vilket andra raden gör.

Skrivet av lydell:

Det är bra att posta exakt felmeddelande. Nu gissar jag, men en del verktyg kräver att man specificerar vilka globala variabler man förväntar sig finnas. Man kan t ex välja om man vill ha browser-globals (window, document, location, mfl) eller Node.js-globals eller något helt annat. Du kanske behöver ställa in nåt sånt i Brackets?

Dom exakta felmeddelanden är ganska många men skriver jag ord som const, let, var så får jag upp felmeddelande om att dom inte är deklarerade (orden const, let, var alltså, inte bokstaven). function är ett reserverat ord som inte får använda parenteser, vad det nu betyder.

console.log ändras automatisk då man inte får använda "." och tydligen måste använda citattecken ("");

Provade dessa

let c = 3; let d = 4;

const / let / var är inte deklarerade säger en dialogruta så fort man trycker mellanslag, man har ju inte ens hunnit skriva första bokstaven av namnet på variabeln.

function sum(a, b) { return a + b; }

Funktionen får inte innehålla parenteser?

console.log(sum(c, d));

Ger siffran 7 i firefox, men får inte innehålla "." (enligt editorn), ändras till consolelog i editorn och måste omges av citattecken.

dvs
consolelog("sum(c, d)"); vilket så klart är fel i firefox, med punkt i console.log så ger det så klart strängen sum(c, d) istället för 7.

Har provat flera saker från Youtube och sidor på nätet, samtliga får felmeddelanden.

Det jobbigaste är att man blir avbruten vid typ vart tredje tecken.

Visa signatur

Server: Fractal design Define 7 XL | AMD Ryzen 7 5800X 8/16 | ASUS ROG CROSSHAIR VIII DARK HERO | 64GB Corsair @ 3000MHz | ASUS Radeon RX 460 2GB | Samsung 960 PRO 512 GB M.2 | 2x 2TB Samsung 850 PRO SSD | 6x Seagate Ironwolf Pro 10TB
WS: Phantex Entoo Elite | AMD Ryzen Threadripper 1950X 16/32 | ASUS Zenith extreme | 128GB G.Skill @ 2400MHz | ASUS Radeon HD7970 | 3x 2TB Samsung 960PRO M.2 | 6x Seagate Ironwolf Pro 10 TB
NEC PA301W 30" @ 2560x1600 | Linux Mint 21.3 Cinnamon

Permalänk
Medlem
Skrivet av Erik_T:

Webbläsare brukar vara väldigt förlåtande när det gäller mindre felaktigheter i html/css/javascript. Så att något visas som förväntat i en webbläsare betyder inte att detta något är felfritt.

Så det finns säkert fel i din kod, men inget som hindrar Firefox från att köra den.

Den HTML du postade är till exempel långt ifrån ett korrekt HTML dokument, men den blev säkert renderad som du väntade dig ändå.

Det var den här raden du tänkte på?

<p id="thispage">Länk till denna sida: <a id="pathname" href="#"></a></p>

Nu har jag ju bara "en rad" i det här men editorn har så klart skapat det nödvändigaste runt omkring.

Vet inte om detta säger något, tror det är ganska ointressant för problemet, men så här ser min HTML-fil ut.

<!DOCTYPE html> <html lang="sv-SE"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content="Your Name"> <meta name="description" content="Example description"> </head> <body> <p id="thispage">Länk till denna sida: <a id="pathname" href="#"></a></p> <script src="js/style.js"></script> </body> </html>

Eftersom det är JS-editorn som klagar på allt så känns det mer som ett problem isolerat till editorn, den vet ju inte ens vilken html-fil jag använder.

Visa signatur

Server: Fractal design Define 7 XL | AMD Ryzen 7 5800X 8/16 | ASUS ROG CROSSHAIR VIII DARK HERO | 64GB Corsair @ 3000MHz | ASUS Radeon RX 460 2GB | Samsung 960 PRO 512 GB M.2 | 2x 2TB Samsung 850 PRO SSD | 6x Seagate Ironwolf Pro 10TB
WS: Phantex Entoo Elite | AMD Ryzen Threadripper 1950X 16/32 | ASUS Zenith extreme | 128GB G.Skill @ 2400MHz | ASUS Radeon HD7970 | 3x 2TB Samsung 960PRO M.2 | 6x Seagate Ironwolf Pro 10 TB
NEC PA301W 30" @ 2560x1600 | Linux Mint 21.3 Cinnamon

Permalänk
Medlem
Skrivet av OldComputer:

Dom exakta felmeddelanden är ganska många men skriver jag ord som const, let, var så får jag upp felmeddelande om att dom inte är deklarerade (orden const, let, var alltså, inte bokstaven). function är ett reserverat ord som inte får använda parenteser, vad det nu betyder.

Jag gissar på att din editor antingen är inställd på ES5 (eller äldre) alternativt inte alls stödjer ES6+. Åtminstone let är ett giltigt variabelnamn i ES5, så om du skriver let hej = "på dig" så kan det vara så att den förväntade sig var let hej = "på dig". Den borde också ge syntax error på hej.

Så … kolla upp om Brackets stödjer modern JavaScript och i så fall hur du aktiverar det. Alternativt byt editor då Brackets är EOL.

Citat:

console.log ändras automatisk då man inte får använda "." och tydligen måste använda citattecken ("");

Wat! Låter som spiken i kistan för Brackets! Testa VSCode vet ja!