Archief - JS: functie zoals php isset

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

frenzal

Legacy Member
Ik heb een javascript code die nodig is voor een css dropdown menu, deze zit in een .js bestand die ik over heel de site gebruik

Maar op sommige delen van de site zijn er geen subpaginas, en dus ook geen submenu. Hierdoor gaat de code getElementById doen op een element die niet bestaat en een error geven.

Hoe kan ik dit opvangen, en kijken dat een element bestaat, blijkbaar door een if te steken gaat niet, want het returned altijd null. Ik heb al heel wat rond gezocht en niks goed gevonden, dus als iemand sugggesties heeft..

Disa

Legacy Member
if (x == null) {
alert('er is geen element');
}

gaat dit niet?

Fr3aK

Legacy Member
Ik doe het op volgende manier:
Code:
var box = document.getElementById('box');
if (box) {
  alert('Blabla');
}

frenzal

Legacy Member
been there done that, voor een variable kun je checken op == undefined, maar het is geen variabel, maar een id die in mijn html wel of niet kan voorkomen en getelementbyid geeft altijd null terug, dus checken op null gaat ook niet

onderschat mijn zoekpowers aub niet ^^

Lashknife

Legacy Member
gewoon zoals met dat box ding dat hierboven reeds gezegd is:

if (document.getElementById('id')) {...

bestaat dit? -> true voor de if (ongeacht wat er aan de if gegeven wordt, dit wordt aanzien als true
bestaat dit niet? -> false voor de if want krijgt niks geldigs terug.

Radiance

Legacy Member
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>test</title>
<script language="javascript" type="text/javascript">
function doeWat()
{
	var undefined;
	if(document.getElementById("primaryNav") == undefined)
	{
		alert('nee');
	}
	else
	{
		alert('ja');
	}
}
</script>
</head>

<body onload="doeWat()">
<div id="primaryNav">div (primaryNav)</div>
</body>
</html>

Combinatie van google link die k postte & getelementbyid.
Marcheert niet zonder de onLoad function call percies, iemand die effectief iets van JS kent kan dat mssn nog oplossen :)

frenzal

Legacy Member
ik heb dan toch maar mijn js bestand opgesplits en enkel gebruikt op de paginas waar het nodig is, de laatste oplossing werkt wel ok voor die test situatie
maar ik zou liever niet met een onload werken en een functie, want de code die voor problemen zorgde was al een functie

conclusie, de probleem is echt niet zo vanzelfsprekend als het lijkt :)

dJeez

Legacy Member
Dat probleem is anders vrij vanzelfsprekend. HTML wordt geparsed, en Javascript die door de parser gaat wordt ook direct geparsed (en uitgevoerd indien van toepassing). Als je dus JS code zet in de HEAD wordt die direct bij het binnenladen al uitgevoerd. Zonder de onload wordt de code dus uitgevoerd alvorens de parser bij de definitie van die ID is gekomen en is het dus vrij logisch dat JS zegt dat die ID (nog) niet bestaat.

De slechte oplossing zou zijn om uw JS code helemaal onderaan uw HTML aan te roepen net voor het afsluiten van de body tag.

De code in een functie zetten en uitvoeren na het laden van de pagina (onload event) is echter de normale, correcte manier van werken. Waarom je niet via een functie wil werken is mij een raadsel...

Lashknife

Legacy Member
what about

window.onload = myThing; (zonder haakjes)

function myThing() { uw gedoe }

om Radiance aan te vullen btw ;)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan