Object undefined

Status
Niet open voor verdere reacties.

Matthias999

Gebruiker
Lid geworden
29 jan 2019
Berichten
5
Hallo allemaal

Ik ben bezig met een oefening om een personeelsbestand te maken met selectieknoppen. Je vult je gegevens in via een formulier. In het begin lijkt alles goed te werken. Ik druk op de "save en next" knop en de functie maakt een object van de gegevens dat ik heb ingevuld en begint met een blanco formulier. En zo doe ik steeds opnieuw. Als ik klaar ben dan druk ik op de "klaar" knop, het formulier verdwijnt en er komen 4 selectieknoppen tevoorschijn die ik nog moet invullen met een functie. Maar vanaf ik op de klaar knop druk krijg ik ineens foutmeldingen dat het object niet gedefineerd is... Het lijkt erop dat vanaf ik op de "klaar" knop druk dat het programma het object doodleuk wist? Parameters invullen helpt ook niets... Ik heb nog niet zoveel ervaring met javascript, waarschijnlijk is het een grote beginnersfout... Wie kan er mij helpen?

HTML:
<html>
<h1>Registratie van de personeelsleden</h1>
<br>
<form name="personeelsleden" id="personeelform" action="" method="get">
			<p>
				Alle velden zijn verplicht
			</p>
			<div>
				<label for='voornaam'>Voornaam </label>
				<input type="text" name="Voornaam" maxlength="15" id="voornaam">
				<label class="msg"></label>
			</div>
			<div>
                <label for='naam'>Naam </label>
				<input type="text" name="Naam" maxlength="25" id="naam">
				<label class="msg"></label>
                </div>
			<div>               
				<label for='geslacht'>Geslacht </label>M
				<input type="radio" name="geslacht" id="man"  value="M">
				V
				<input type="radio" name="geslacht" id="vrouw" value="V">
				<label class="msg"></label>
			</div>
			<div>
				<label for='geboortedatum'>Geboortedatum</label>
				<input type="date" name="geboortedatum" id="geboortedatum">
				<label class="msg"></label>
			</div>
			<div>
				<label for='salaris'>Salaris</label>
				<input type="number" name="Salaris" value="0" id="salaris">
				<label class="msg"></label>
			</div>
			<div>
				<label for='rijbewijsB'>Rijbewijs B</label>
				<input type="checkbox" name="RijbewijsB" value="RijbewijsB" id="rijbewijsB">
				<label class="msg"></label>
			</div>
			<div>
				<label></label>
                <br>
				<button id= "save" type="button">
					Save en next
				</button><label class="msg"></label>
			</div>
    <br>
    </div><span id="teller">0</span><div id="info">personeelsleden in de databank</div>
    </label>
		<br>
    <br>
		<button id= "personeelslijst" type="button">
			Klaar
		</button>
    </form>
<br>
<input type="button" id="selectie1" value="Selectie 1">
<input type="button" id="selectie2" value="Selectie 2"><div id="output2"></div>
<input type="button" id="selectie3" value="Selectie 3"><div id="output3"></div>
<input type="button" id="selectie4" value="Selectie 4"><div id="output4"></div>
<br>
<div id="output1"></div>
</html>

Code:
 <script>
        
       //======================== Array ============================//
        
        var aoLijst = new Array();
            
        
        //window.onload = function (aoLijst){
        
    
        //======================== Dom elementen ============================//
        
        var voornaam = document.getElementById("voornaam");
        var naam = document.getElementById("naam");
        var geslacht = personeelsleden.geslacht;
        var geboortedatum = document.getElementById("geboortedatum");
        var salaris = document.getElementById("salaris");
        var rijbewijs = document.getElementById("rijbewijsB");
        var saveKnop = document.getElementById("save");
        var klaarKnop = document.getElementById("personeelslijst");
        var teller = document.getElementById("teller");
        var selectie1 = document.getElementById("selectie1"); // Aantal vrouwen in de selectie die meer dan 2000 euro verdienen
        var selectie2 = document.getElementById("selectie2"); // Een chronologische lijst van verjaardagen
        var selectie3 = document.getElementById("selectie3"); // Gemiddeld salaris
        var selectie4 = document.getElementById("selectie4"); // aantal mensen jonger dan 30 jaar die geen rijbewijs B hebben
        var output = document.getElementById("output1");
        
        
        // laat de 4 selectieknoppen en de output verdwijnen
        selectie1.style.display = "none";
        selectie2.style.display = "none";
        selectie3.style.display = "none";
        selectie4.style.display = "none";
        output.style.display = "none";
    
   
    
    //======================== event Listeners ============================//
        
        
        
        
    saveKnop.addEventListener('click', function (e){
               e.preventDefault();
               personeelInlezen(this);
          })
        
    
        
    
         
        //======================== Leest de personen in ============================//
        
        function personeelInlezen(Voornaam, Naam, Geslacht, Geboortedatum, Salaris, RijbewijsB, teller){
            
            
     //formulierwaarden aflezen
     var sVoornaam = voornaam.value; //String
     var sNaam = naam.value; //String
     var sGeslacht = undefined ; //String of undefined
     var eGeboortedatum = geboortedatum.value; //date input
     var eSalaris = salaris.value; //number
     var cRijbewijsB = rijbewijs.checked; //boolean
    var parts   = eGeboortedatum.split("-"); // splitst het date-format in stukken
    var day     = parseInt(parts[2], 10); // dag
    var month   = parseInt(parts[1], 10); // maand
    var year    = parseInt(parts[0], 10); // jaar  
    //bepaal value geslacht
     for(var i=0;i<geslacht.length;i++){
          if(geslacht[i].checked==true){sGeslacht=geslacht[i].value};
     }
            
            
            // validatie velden
        
        if (sVoornaam == "" || sNaam =="" || typeof(sGeslacht) == "undefined" || isNaN(eSalaris)){
            alert("één of meerdere van de velden zijn niet ingevuld!")
        }
        else if (year > 2001){
            alert("Dit persoon is te jong om in dit bedrijf te werken");
        }
        // We sturen de gegevens door om ze op te slaan
         else{ fnPersoneelslidToevoegen(sVoornaam, sNaam, sGeslacht, eGeboortedatum, eSalaris, cRijbewijsB);
        document.getElementById("personeelform").reset();
        voornaam.focus();     
             }
           
        
            
            
            
        
        //======================== Slaagt de personen op in de lijst ============================//
        
   function fnPersoneelslidToevoegen(sVoornaam, sNaam, sGeslacht, eGeboortedatum, eSalaris, cRijbewijsB, persoon, info, teller){
       
       
       
            
            var persoon = new Object();
            persoon.voornaam = sVoornaam;
            persoon.naam = sNaam;
            persoon.geslacht = sGeslacht;
            persoon.geboortedatum = eGeboortedatum;
            persoon.salaris = eSalaris;
            persoon.rijbewijsB = cRijbewijsB;
          
            
            aoLijst.push(persoon);
            console.log(persoon);
            console.log(persoon.voornaam)
            console.log(aoLijst.length)
            
            
            
            if (aoLijst.length == 10){
                saveKnop.style.display = "none";
            }
                
            else if (aoLijst.length == 1){
                var info = document.getElementById("info")
              info.innerHTML = "personeelslid in de databank"; 
            }
            else if (aoLijst.length >1) {
                var info = document.getElementById("info")
               info.innerHTML = "personeelsleden in de databank";
            }
                
            
            fnUpdateTeller(1); 
             
             
        }
     
//======================== teller ============================//
        
function fnUpdateTeller(n){
     /*
     update de teller in de span#teller
     @n increment/verhoging
     */
     var teller = document.getElementById('teller');
     var nTeller = parseInt(teller.innerHTML);
     nTeller = nTeller + n;
     teller.innerHTML = nTeller;
    
    
}
     klaarKnop.addEventListener("click", function (e){
        e.preventDefault();
        knoppenScherm(this);                 
                               
                })
   
  //======================== Analyse scherm ============================//      
    
    // Laat het analyse scherm verschijnen   
        
function knoppenScherm(aoLijst, persoon){
    
    if (aoLijst.length <2){
        alert("Voeg minimaal 2 personeelsleden in!")
        
    }
    
    else{
        
        var form = document.getElementById("personeelform");
        form.style.display = "none";
        selectie1.style.display ="block";
        selectie2.style.display ="block";
        selectie3.style.display ="block";
        selectie4.style.display ="block";
        output1.style.display ="block";
        var kop = document.getElementsByTagName("h1")[0];
        kop.innerHTML = "Analyse scherm";
       
        
    }
     console.log(persoon.voornaam)
     
}  
        
        selectie1.addEventListener("click", function (e){
        e.preventDefault();
        selectieKnop1(this);  
        
        
    })
    
    
    function selectieKnop1 (aoLijst, persoon){
        
    
    
    var aantalVrouwenSalaris = 0;
        
        console.log(persoon.voornaam)
        
        if (persoon.geslacht == "V" && persoon.salaris >2000){
              for(var i = 0; i<persoon.length-1;i++){ 
            aantalVrouwenSalaris = aantalVrouwenSalaris + 1;}
            alert("Er zijn " + aantalVrouwenSalaris + " vrouwen met een maandloon van meer dan 2000 euro")
        }
     
        else{alert ("test")
            }
        
        
        
        
        
             
        
    }
        
          
        
        
        
        
        
        
        
        
        
        
            
    
        
        
        
        
    
    
    
        }
        
        
        
    
        
        
        
    
    </script>
 
html: er staat een </div> en een </label> teveel (en de <head> sectie mist)
JS: onderaan staan 2 accolades teveel.
JS: funtie fnPersoneelslidToevoegen bevat de andere functies, klopt dit of staan accolades verkeerd?

Je gebruikt geen 'use strict' dan zou ik een var buiten een if houden ter voorkoming van undefined meldingen. Als voorbeeld:
Code:
var info = document.getElementById("info");
if (aoLijst.length == 10) {
  saveKnop.style.display = "none";
} else if (aoLijst.length == 1) {
  info.innerHTML = "personeelslid in de databank"; 
} else if (aoLijst.length >1) {
  info.innerHTML = "personeelsleden in de databank";
}
 
html: er staat een </div> en een </label> teveel (en de <head> sectie mist)
JS: onderaan staan 2 accolades teveel.
JS: funtie fnPersoneelslidToevoegen bevat de andere functies, klopt dit of staan accolades verkeerd?

Je gebruikt geen 'use strict' dan zou ik een var buiten een if houden ter voorkoming van undefined meldingen. Als voorbeeld:
Code:
var info = document.getElementById("info");
if (aoLijst.length == 10) {
  saveKnop.style.display = "none";
} else if (aoLijst.length == 1) {
  info.innerHTML = "personeelslid in de databank"; 
} else if (aoLijst.length >1) {
  info.innerHTML = "personeelsleden in de databank";
}

Bedankt voor de tips, maar dat lost nog steeds mijn probleem niet op... :/
 
De lap code is te groot om er, naast mijn eigen werk, in te duiken.

vanaf ik op de klaar knop druk krijg ik ineens foutmeldingen dat het object niet gedefineerd is.
Zelf zou ik met console.log kijken in welke volgorde de functions worden doorlopen en dan telkens kijken of het object bestaat.
 
Het is me nog niet echt duidelijk wat je met het script wilt aanvangen, maar hier is het deel dat je werkende wilde krijgen.
Ik ga niet ingaan op wat ik aangepast heb want er is redelijk wat werk aan geweest.

Leg het origineel naast dit en vergelijk. Zo zal je zelf de verschillen wel vinden.

Let wel: Het is zeker niet perfect omdat ik ook maar een hobby scripter ben.

Ik heb me ook de vrijheid genomen alles wat op te kuisen.

Code:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled Document</title>
<script>
//======================== Array ============================//

var aoLijst = [];

var voornaam, naam, geslacht, geboortedatum, salaris, rijbewijs, saveKnop, klaarKnop, teller, selectie1, selectie2, selectie3, selectie4, output, teller, nTeller;

//======================== Leest de personen in ============================//

function personeelInlezen() {
	//formulierwaarden aflezen
	var sVoornaam = voornaam.value; //String
	var sNaam = naam.value; //String
	var sGeslacht = geslacht.value; //String of undefined
	var eGeboortedatum = geboortedatum.value; //date input
	var eSalaris = salaris.value; //number
	var cRijbewijsB = rijbewijs.checked; //boolean
	var parts = eGeboortedatum.split("-"); // splitst het date-format in stukken
	var day = parseInt(parts[2], 10); // dag
	var month = parseInt(parts[1], 10); // maand
	var year = parseInt(parts[0], 10); // jaar 
	
	// validatie velden
	if (sVoornaam == "" || sNaam == "" || typeof(sGeslacht) == "undefined" || isNaN(eSalaris)) {
		alert("één of meerdere van de velden zijn niet ingevuld!")
	} else if (year > 2001) {
		alert("Deze persoon is te jong om in dit bedrijf te werken");
	} else {
		// We sturen de gegevens door om ze op te slaan
		fnPersoneelslidToevoegen(sVoornaam, sNaam, sGeslacht, eGeboortedatum, eSalaris, cRijbewijsB);
		document.getElementById("personeelform").reset();
		voornaam.focus();     
	}
}

//======================== Slaat de personen op in de lijst ============================//

function fnPersoneelslidToevoegen(sVoornaam, sNaam, sGeslacht, eGeboortedatum, eSalaris, cRijbewijsB, persoon, info, teller){
	var infospan = document.getElementById("infospan");
	var persoon = new Object();
	persoon.voornaam = sVoornaam;
	persoon.naam = sNaam;
	persoon.geslacht = sGeslacht;
	persoon.geboortedatum = eGeboortedatum;
	persoon.salaris = eSalaris;
	persoon.rijbewijsB = cRijbewijsB;
	
	aoLijst.push(persoon);
	
	if (aoLijst.length == 10) {
		saveKnop.style.display = "none";
	} else if (aoLijst.length == 1) {
		infospan.innerHTML = " personeelslid in de databank"; 
	} else if (aoLijst.length > 1) {
		infospan.innerHTML = " personeelsleden in de databank";
	}
	
	fnUpdateTeller(1);
}
     
//======================== teller ============================//
        
function fnUpdateTeller(n) {
	/*
	update de teller in de span#teller
	@n increment/verhoging
	*/
	nTeller = parseInt(teller.innerHTML);
	nTeller += n;
	teller.innerHTML = nTeller;
}

//======================== Analyse scherm ============================//      

// Laat het analyse scherm verschijnen   

function knoppenScherm() {
	if (aoLijst.length < 2) {
		alert("Voeg minimaal 2 personeelsleden in!");
	} else {
		var form = document.getElementById("personeelform");
		form.style.display = "none";
		selectie1.style.display ="block";
		selectie2.style.display ="block";
		selectie3.style.display ="block";
		selectie4.style.display ="block";
		output1.style.display ="block";
		var kop = document.getElementsByTagName("h1")[0];
		kop.innerHTML = "Analyse scherm";
	}
}  

function selectieKnop1() {
  var aantalVrouwenSalaris = 0;
  for (var i = 0; i < aoLijst.length; i++) {
		if (aoLijst[i].geslacht == "V" && parseInt(aoLijst[i].salaris) > 2000) {
			aantalVrouwenSalaris++;
		}
	}
	var ww = (aantalVrouwenSalaris == 1 ? "is" : "zijn");
	var vrouwen = (aantalVrouwenSalaris == 1 ? "vrouw" : "vrouwen");
	alert("Er " + ww + " " + aantalVrouwenSalaris + " " + vrouwen + " met een maandloon van meer dan 2000 euro");
}
</script>
</head>
<body>
<h1>Registratie van de personeelsleden</h1>
<br>
<form name="personeelsleden" id="personeelform" action="" method="get">
  <p> Alle velden zijn verplicht </p>
  <div>
    <label for="voornaam">Voornaam </label>
    <input type="text" name="Voornaam" maxlength="15" id="voornaam">
    <label class="msg"></label>
  </div>
  <div>
    <label for="naam">Naam </label>
    <input type="text" name="Naam" maxlength="25" id="naam">
    <label class="msg"></label>
  </div>
  <div>
    <label for='geslacht'>Geslacht </label>
    M
    <input type="radio" name="geslacht" id="geslacht"  value="M">
    V
    <input type="radio" name="geslacht" id="geslacht" value="V">
    <label class="msg"></label>
  </div>
  <div>
    <label for="geboortedatum">Geboortedatum</label>
    <input type="date" name="geboortedatum" id="geboortedatum">
    <label class="msg"></label>
  </div>
  <div>
    <label for="salaris">Salaris</label>
    <input type="number" name="Salaris" value="0" id="salaris">
    <label class="msg"></label>
  </div>
  <div>
    <label for="rijbewijsB">Rijbewijs B</label>
    <input type="checkbox" name="RijbewijsB" value="RijbewijsB" id="rijbewijsB">
    <label class="msg"></label>
  </div>
  <div>
    <label></label>
    <br>
    <button id="save" type="button"> Save en next </button>
    <label class="msg"></label>
  </div>
  <br>
  <div id="info">
  	<span id="teller">0</span>
    <span id="infospan"> personeelsleden in de databank</span>
  </div>
  <br>
  <br>
  <button id="personeelslijst" type="button"> Klaar </button>
  <br>
  <br>
</form>
<p>
	<input type="button" id="selectie1" value="Selectie 1">
	<span id="output1">Output 1</span>
</p>
<p>
  <input type="button" id="selectie2" value="Selectie 2">
  <span id="output2">Output 2</span>
</p>
<p>
  <input type="button" id="selectie3" value="Selectie 3">
  <span id="output3">Output 3</span>
</p>
<p>
  <input type="button" id="selectie4" value="Selectie 4">
  <span id="output4">Output 4</span>
</p>
<script>
window.onload = function() {
		
	//======================== Dom elementen ============================//
	
	voornaam = document.getElementById("voornaam");
	naam = document.getElementById("naam");
	geslacht = document.forms[0].geslacht;
	geboortedatum = document.getElementById("geboortedatum");
	salaris = document.getElementById("salaris");
	rijbewijs = document.getElementById("rijbewijsB");
	saveKnop = document.getElementById("save");
	klaarKnop = document.getElementById("personeelslijst");
	teller = document.getElementById("teller");
	selectie1 = document.getElementById("selectie1"); // Aantal vrouwen in de selectie die meer dan 2000 euro verdienen
	selectie2 = document.getElementById("selectie2"); // Een chronologische lijst van verjaardagen
	selectie3 = document.getElementById("selectie3"); // Gemiddeld salaris
	selectie4 = document.getElementById("selectie4"); // aantal mensen jonger dan 30 jaar die geen rijbewijs B hebben
	output = document.getElementById("output1");
	teller = document.getElementById("teller");
	
	// laat de 4 selectieknoppen en de output verdwijnen
	
	selectie1.style.display = "none";
	selectie2.style.display = "none";
	selectie3.style.display = "none";
	selectie4.style.display = "none";
	output.style.display = "none";
	
	//======================== event Listeners ============================//
	
	saveKnop.addEventListener('click', function (e){
		e.preventDefault();
		personeelInlezen();
	});
	
	klaarKnop.addEventListener("click", function (e){
		e.preventDefault();
		knoppenScherm();
	});
	
	selectie1.addEventListener("click", function (e){
		e.preventDefault();
		selectieKnop1(this);
	});
}
</script>
</body>
</html>
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan