Stukje javascript waar ik onzeker over ben
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
var onderdelen = array();
onderdelen[0] = "vak";
function start(onderdeel){
// unload alle divs
for (onderdeel2 in onderdelen){
eval("document.getElementById(div_"+onderdeel2+").style.visibility='hidden'"); //maakt alle divs weer onzichtebaar
}
eval("document.getElementById(div_"+onderdeel+").style.visibility='visible'"); //maakt bijvoorbeeld de div div_vak zichtbaar
eval("function_"+onderdeel+"()"); //moet bijvoorbeeld de functie funtion_vak() aanroepen
}
onderdelen[0] = "vak";
function start(onderdeel){
// unload alle divs
for (onderdeel2 in onderdelen){
eval("document.getElementById(div_"+onderdeel2+").style.visibility='hidden'"); //maakt alle divs weer onzichtebaar
}
eval("document.getElementById(div_"+onderdeel+").style.visibility='visible'"); //maakt bijvoorbeeld de div div_vak zichtbaar
eval("function_"+onderdeel+"()"); //moet bijvoorbeeld de functie funtion_vak() aanroepen
}
Kan iemand mij vertellen wat hier anders moet?
P.S. Als iemand een goede editor/debugger kent die dit soort fouten op kan sporen dan is dat ook welkom
Gewijzigd op 01/01/1970 01:00:00 door Roel
wat is het probleem
Waarvoor doe je heel de tijd een eval?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
var onderdelen = array();
onderdelen[0] = "vak";
function start(onderdeel){
// unload alle divs
for (onderdeel2 in onderdelen){
document.getElementById('div_'+onderdeel2).style.visibility='hidden'; //maakt alle divs weer onzichtebaar
}
document.getElementById('div_'+onderdeel).style.visibility='visible'; //maakt bijvoorbeeld de div div_vak zichtbaar
eval('function_'+onderdeel+'()'); //moet bijvoorbeeld de functie funtion_vak() aanroepen
}
?>
var onderdelen = array();
onderdelen[0] = "vak";
function start(onderdeel){
// unload alle divs
for (onderdeel2 in onderdelen){
document.getElementById('div_'+onderdeel2).style.visibility='hidden'; //maakt alle divs weer onzichtebaar
}
document.getElementById('div_'+onderdeel).style.visibility='visible'; //maakt bijvoorbeeld de div div_vak zichtbaar
eval('function_'+onderdeel+'()'); //moet bijvoorbeeld de functie funtion_vak() aanroepen
}
?>
En het probleem is dat de functie function_vak() niet aangeroepen wordt.
function vak(parameters)
Webmakerij:
function vak(parameters)
Ik zeg toch een variabele functie, dus 1 die steeds verschilt.
Als je het script nou nog es bekijkt en een ander onderdeel gebruikt, dan moet hij ook een andere div tonen en een andere functie (die die bij de div hoort en de div invult) openen.
Maar zou iemand me anders een debugger ofzo kunnen vertellen waarmee ik gewoon exact zie wat hij doet per regel zodat ik echt weet wat er mis gaat?
Een beetje hetzelfde als een open deur opentrappen...
Volgens mij is het scriptje van Jonathan de juiste manier om je script met zo min mogelijk evals uit te voeren.
Maar zou je aan willen geven wat er precies fout gaat met je scriptje? En wat de bedoeling van het scriptje is?
In je huidige voorbeeld is onderdeel2 ook een variabele waarvan we moeten gokken welke waarde hij bevat...
Ik hoor het graag van je!
Je hebt een index waarin lege divs staan, die worden als pagina's gebruikt maar het is de bedoeling dat de pagina niet hoeft te herladen.
Dit wil ik bereiken door de functie start, deze verberd eerst alle divs, en maakt dan de gekozen div zichtbaar.
Onderdeel 2 is gewoon steeds het onderdeel dat verborgen wordt, met de for variable in array loop.
De functie function_vak() maakt connectie met een php bestand en dat php bestand echo't de (school)vakken uit de database.
het geheel wordt een overhoor programma.
Het probleem is dat ik nu een pagina met een lege div krijg als ik het uitprobeer:
http://ddf.ksdz.nl/overhoren/
Ik ben nog een beginner met javascript dus ik probeer door middel van dat overhoor programma wat meer over javascript te leren om mooie AJAX scripts in de toekomst te kunnen schrijven, ik heb wel al redelijk veel verstand van PHP, maar heb Javascript altijd vermijd omdat ik het gewoon eerlijk gezegd een rottaal vond: Slechte error reporting, draait op de pc van de gebruiker waardoor een hoop dingen er niet meer mee kunnen, en ik vond het onoverzichtelijk.
Maar nu begin ik wat meer de mogelijkheden te zien om het in combinatie met PHP te gebruiken dus wil het nu snel weer goed leren.
Maar ik irriteer me wel nog steeds aan de manier waarop javascript met error's omgaat: Niet tonen en gewoon niks uitvoeren...
unterminated string literal
overhoor.js (line 21)
html = '<form id="form_vak" name="form_vak" action="javascript: ">
start is not defined
http://ddf.ksdz.n... (line 1)
Wat PHP Newbie in 10 woorden probeert te zeggen is het volgende:
Als je Firefox installeert heb je daarin een Javascript console. Die geeft netjes alle errors van Javascript weer. Je kunt deze vinden onder het menu Extra.
In dit geval geeft hij 2 errors aan. De eerste is "unterminated string literal", dit betekent dat je een string niet juist hebt afgesloten (bijvoorbeeld een missende " of ')
De 2e foutmelding is "start is not defined". Deze betekent dat de functie start niet gedefinieerd is. Dit komt doordat de eerste error een parse-error in het script is... Hierdoor kan hij het niet juist parsen, en een deel (in dit geval ook de start functie) valt weg
Gewijzigd op 01/01/1970 01:00:00 door Rens nvt
Javascript gaat anders om met regeleinden dan PHP... Je kunt niet zomaar ongestraft verder gaan op de volgende regel.
In PHP kun je het volgende doen:
Dit geeft gewoon "hoi bezoeker" weer.
In Javascript moet je elke regel juist afsluiten.
Om het op jouw manier toch overzichtelijk te houden zou je het volgende kunnen doen
enz. enz.
Je moet hier voor jezelf maar een besluit in nemen wat je handig vindt...
Echt stom dat ik de Javascript console over het hoofd gezien had :D
Bedankt voor de hulp allemaal, nu kom ik tenminste weer verder met javascript leren :)
Stel je hebt een input in een form in een div, en je wilt deze alle 3 by id gebruiken om de waarde van de inputr op te vragen.
Hoe doe je dat dan?
Ik deed dit:
document.getElementById('div').getElementById('form').getElementById('input').value
Maar dan geeft hij dus de melding dat de functie getElementById('div').getElementById niet bestaat.
getElementById is een "child" van document, maar niet van zichzelf...
Ik weet niet precies wat je probeert te bereiken... Maar je kunt overal op de pagina de waarde van een inputfield opvragen via het id dat hij heeft. Je doet dit via document.getElementById("id").value
Het maakt niet uit of het inputfield in een div of form zit.
Tjezus wat voel ik me weer dom...