webForumDet fria alternativet

Id som inte finns...

4 svar · 225 visningar · startad av Troxy

TroxyMedlem sedan mars 20041 505 inlägg
#1

Kod:

document.getElementById(menu_id).style.display = "block";

Detta kör jag i en funktion som jag anropar lite över allt...

menu_id innehåller namnet på ett element som jag ska byta ut lite attribut på, i detta exempel display-attributet i CSS.

Hur skapar jag en kod som förhindrar att det blir scriptfel om menu_id innehåller ett id som inte finns?

Kanske en If-sats som kollar: "Om detta id finns..." osv?

Hjälp tack!

dectgapMedlem sedan sep. 20021 655 inlägg
#2
var elm;
if(elm = document.getElementById(menu_id))
   elm.style.display = "block";

borde fungera.

TroxyMedlem sedan mars 20041 505 inlägg
#3

Tack!

Några frågor:

1. Varför behövs inga klammrar {} efter if-satsen?
2. Hur kollar man så att flera objekt måste finnas?

dectgapMedlem sedan sep. 20021 655 inlägg
#4

1. Om du bara har ett uttryck som ska utföras om if-satsens jämförelse är sann behövs inga måsvingar ( { } ).

Betrakta

if(condition)
   expression1; // kommer bara att köras om condition är true
expression2; // kommer att köras oavsett

Vill man att båda ska köras får vi använda måsvingarna för att skapa ett block:

if(condition) {
   expression1;
   expression2;
}

Trots mitt användande i föregående inlägg är det en god idé att alltid använda måsvingar, även om de inte behövs, eftersom det underlättar läsning av koden och minskar risken för huvudkliande om man ändrar något i koden.

2. Vilken lösning som är smartast beror lite på hur du vill att det ska fungera, men ett sätt är som följer:

var elm1, elm2;

if(elm1 = document.getElementById(menu_id1) && elm2 = document.getElementById(menu_id2)) {
   elm1.style.display = "block";
   elm2.style.display = "block";
}

För att sortera bort läsare som inte förstår sig på getElementById() (även om de inte är så många idag) kan man ändra till

if(document.getElementById &&
   elm1 = document.getElementById(menu_id1) &&
   elm2 = document.getElementById(menu_id2)) {

Radbrytningarna är bara där för att raden inte ska bli för lång.

Det är inget tvång att ha tilldelningen i jämförelse-uttrycket (i brist på bättre ord), men för att slippa att först kolla efter om ett element finns och sedan skapa en referens till det slog jag två flugor i en smäll.

TroxyMedlem sedan mars 20041 505 inlägg
#5

Tack så mycket!!!

133 ms totalt · 3 externa anrop · v20260731065814-full.37765c92
130 ms — hämta forumlista (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)