Variabele reeks aankruisvakjes

Status
Niet open voor verdere reacties.

Uturn

Gebruiker
Lid geworden
7 apr 2009
Berichten
100
Ik heb een programma geschreven in JavaScript dat de resultaten in een tabel weergeeft. Het aantal elementen in de tabel (dus de hoeveelheid rijen) is afhankelijk van het resultaat van de bewerking. Nu wil ik achter elke rij een aankruisvakje hebben waardoor de gebruiker kan aanvinken of hij/zij dat resultaat wil behouden. Ik heb geprobeerd dit voor elkaar te krijgen maar het lukt me niet.

Hoe kun je een variabele hoeveelheid aankruisvakjes creeëren en vervolgens inlezen welke vakjes zijn aangekruist?
 
wil je ze dynamisch via JS toevoegen? In dat geval zal je een loop moeten maken, en dan in steeds een nieuwe checkbox moeten toevoegen. Het is makkelijker als je dit al doet tijdens het maken:
... dat de resultaten in een tabel weergeeft ...

In ieder geval, je geeft de checkboxen allemaal een id (check_1, check_2, etc.). Dan loop je en check je of deze checkbox aangevinkt is.

Mischien is het wat makkelijker als je wat code post :)
 
Checkboxen inlezen lukt me wel, maar het probleem is dus dat ik een variabele hoeveelheid heb, en dus geen vaste naam kan geven aan de checkboxen (zoals de door jou voorgestelde check_1, check_2 etc), het moet dus een variabele zijn (ik heb ook geprobeerd met "name='box'+variabele", maar dat werkt niet).

De code van de functie waarin de checkboxen uiteindelijk moeten komen is vrij lang en ingewikkeld, dus ik post hier een stukje dat ik makkelijk kan inbouwen. Ik dacht het te kunnen oplossen door de vakjes met een array een naam te geven, maar dit werkt niet.

De (niet werkende) code:

<html>
<head>
<title>Demo</title>

<script type="text/javascript">

var VakjeNaam = new Array();

function DoTheCheck() {
for (i = 1; i <= 3; i++) {
if(document.InvoerPagina.VakjeNaam.checked == true) {
alert('box' + i + ' is checked'); }
if(document.InvoerPagina.VakjeNaam.checked == false) {
alert('box' + i + ' is not checked'); }
}
}

</script>

</head>

<body>

<form name="InvoerPagina" method="post" action="">

<p>Kruis aan</p>

<script type="text/javascript">

for (tel = 1; tel <= 3; tel++) {
document.write("<input type='checkbox' name=VakjeNaam[tel] value='yes'>");
}

</script>

<input type="submit" name="verzend" value="Analyse" onClick="DoTheCheck()">
</form>

</body>
</html>
 
Laatst bewerkt:
Probeer document.createElement i.c.m. node.appendChild

Waar genereer je de tabel? Doe je dit aan de server kant (vanuit een PHP script bijvoorbeeld) ? Zoals Vegras al suggereert is het wellicht dan makkelijker om daar ook de checkboxes meteen te genereren.

Als je toch vanuit javascript checkboxes wilt genereren, probeer dan eens iets als dit:

Code:
<form name="InvoerPagina" onsubmit="DoTheCheck();">
  <p>Kruis aan</p>
  <!-- divje voor de checkboxes, let op het id -->
  <div id="checkboxes"></div>
</form>

<script type="text/javascript">
  function DoTheCheck() {
    for (var i=0; i<3; i++) {
      var input = document.getElementById('checkbox' + i);             // <-- hier gebeurt het
      alert('box ' + i + ' is ' + (input.checked ? '' : 'not') + ' checked.');
    }
  }

  function createCheckboxes() {
    // haal de div binnen het formulier op
    var checkboxes = document.getElementById('checkboxes');    // <-- hier gebeurt het
    // creeer drie checkboxes
    for (var i=0; i<3; i++) {
      // document.createElement is de aangewezen methode om nieuwe elementen te 
      // maken. Waag je niet aan document.write, veroorzaakt veel ellende
      var input = document.createElement('input');
      // gemaakt, nu attributen toewijzen
      input.type = 'checkbox';
      input.id = 'checkbox' + i;                        // <-- hier gebeurt het
      input.checked = true;
      // Nu nog toevoegen aan het formulier, binnen de div die we al hadden opgehaald...
      checkboxes.appendChild(input);           // <-- hier gebeurt het
    }
  }

  createCheckboxes();

</script>

Bovenstaande code is ongetest, dat laat ik aan jou over, maar de aanpak moge duidelijk zijn:

* document.createElement('input') om een input element aan te maken
* document.type = 'checkbox' om er een checkbox van te maken
* input.id = 'checkbox' + i om een uniek id toe te wijzen
* node.appendChild(input) om het nieuwe element aan de dom toe te voegen.
* document.getElementById('checkbox' + i) om elementen op te halen
* inpup.checked bepaalt of hij aangevinkt is

Zoek ook eens met google op 'javascript dom' en 'w3c dom' bijvoorbeeld. De w3c dom methods zijn de 'officiele' API voor manipulatie van het document en als je ze eenmaal gebruikt zul je merken dat dingen makkelijker gaan en logischer worden omdat je niet meer de hele tijd met string manipulatie bezig bent zoal met document.write.

Volgens mij was een kleine fout hier:

Code:
document.write("<input type='checkbox' name=VakjeNaam[tel] value='yes'>");

de enige reden dat het niet werkte (de expressie 'VakjeNaam[tel]' wordt als string gezien), maar met document.write blijf je zulke foutjes maken. Dit had het moeten zijn:

Code:
document.write("<input type='checkbox' name='" + VakjeNaam[tel] + "' value='yes'>");

Succes ermee!
 
Het is voor een client-side JavaScript file (geen PHP dus).

Heel erg bedankt voor de hulp! Ik heb de code die je gegeven hebt nu wel aan het werk, maar het inbouwen in mijn tabel lukt niet. Ik zal me eerst moeten verdiepen in deze code: omdat ik niet alles begrijp kan ik hem ook niet aanpassen. Ik had niet verwacht dat voor het creeëren van aankruisvakjes dit erbij kwam kijken.

Nogmaals bedankt in ieder geval. Hiermee weet ik in ieder geval waar te zoeken.
 
Ik heb al een werkend script gevonden voor mijn probleem:

<html>

<head>

<title>Checkb</title>

<script type="text/javascript">
function validate() {
with(document.form1) {
for(var i = 0; i < 4; i++){
if(names.checked) {
alert(i + " is checked");
}
}
}
return false;
}



</script>

</head>

<body>

<script type="text/javascript">

document.write("<form name='form1'>");
for (i = 1; i < 5; i++) {
document.write("<input type='checkbox' name='names'>");
}
document.write("<input type='submit' value='Submit' onClick='validate()'>");
document.write("<input type='reset' value='Reset'>");
document.write("</form>");


</script>

</body>

</html>


Deze code op zichzelf werkt. Alleen als ik het script uit de <body> in een functie zet en dan deze functie vanuit een andere HTML-pagina aanroep dan krijg ik, zodra je op de submit button klikt, de (IE-scriptfout-)melding 'object wordt verwacht', terwijl de code gewoon gekopieerd is. Iemand enig idee waarom?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan