Vraag over het resetten van values

Status
Niet open voor verdere reacties.

Bertus Bolknak

Gebruiker
Lid geworden
14 nov 2009
Berichten
51
Kan iemand mij helpen met het volgende waar ik al uren op zit te tobben:
Op mijn webpagina staan enkele tientallen hidden fields en die hebben allemaal een id met de naam vinkje_1, vinkje_2, vinkje_3, enzovoort oplopend.
De value van de fields kan oftewel 0 oftewel 1 zijn.
Nu heb ik bedacht een functie te gaan aanroepen bij het (re-)loaden van de pagina, om alle values op 0 te resetten. Ik kom helaas niet verder dan onderstaande niet werkende functie:
Waarom werkt dit niet en hoe moet het wel? Ik zou blij zijn als iemand dat kon vertellen.

[JS]function init() {
for (var i = 0; i < input.length; i++) {
var j = i + 1
document.getElementById("vinkje_" + j).value = '0';
}
}[/JS]
 
Heb je de pagina waar je dit gebruikt online staan? Ik zie namelijk geen fout in de code die je gepost hebt.
 
Hallo Supersnail,
Ik probeerde het natuurlijk zo beknopt mogelijk te houden, maar hier komt dan wat meer info:
Laatst werkende versie is http://www.roam.nl/buddybike_v13.php
Zit nu een beetje te tobben op http://www.roam.nl/buddybike_v14.php

Op de pagina's achter bovenstaande links kan je opties aanklikken en dan onderaan op PRINT . . . drukken. Dan dunt de lijst uit tot alles wat een vinkje had. Klik dan op de back button van de browser om bijvoorbeeld de keuzes te herzien (vinkjes aan en vinkjes uit zetten). Klik dan weer op PRINT . . . Tot nu toe werkt het goed he? OK, klik weer op de back button en nu op de Refresh button van de browser. Zet dan weer een paar (andere) vinkjes aan en klik weer op PRINT . . . Wat ik in versie 14 probeer te doen is niet alleen de vinkjes uitzetten maar ook de waardes van de hidden fields, zoals eerder omschreven te resetten naar 0 (zodat deze opties niet meegenomen worden naar de volgende pagina).
Ik heb de bestanden eventueel ge-attached.

Groeten Bert.

Heb je de pagina waar je dit gebruikt online staan? Ik zie namelijk geen fout in de code die je gepost hebt.
 

Bijlagen

Hallo Supersnail.

Schijnbaar maakt de volgorde van de statements een verschil binnen een javascript functie. Dit werkt nu gelukkig, dus je mag je hulp staken wat mij betreft. Vreemdgenoeg werkt het niet als ik document.getElementById('total_hidden').value = 0; achteraan in de functie zet. Misschien dat je daar nog iets over kan zeggen?

[JS] function init() {
document.getElementById('total_hidden').value = 0;
for (var i = 0; i < input.length; i++) {
input.checked = false;
//var j = i + 1
//document.getElementById('vinkje_' + j).value = 0;
}
for (var i = 0; i < input.length; i++) {
var j = i + 1
document.getElementById('vinkje_' + j).value = 0;
}
}[/JS]

Heb je de pagina waar je dit gebruikt online staan? Ik zie namelijk geen fout in de code die je gepost hebt.
 
Ik heb wel een vermoeden waarom dat niet werkt. Je hebt 32 checkboxes, maar veel meer input velden. Daardoor wordt op een gegeven moment document.getElementById('vinkje33') aangeroepen en die bestaat niet
Error: document.getElementById("vinkje_" + j) is null
Source File: http://www.roam.nl/roam-prijzen_v03.js
Line: 38
Het kan best zijn dat het script na zo'n fout stopt.
 
Hmmm.... inderdaad. Dat krijg je als je geen verstand van de materie hebt. Ik probeer alles voetje voor voetje op te lossen. Ik moet nu dus gaan zorgen dat de loop niet verder gaat dan 32. Dat zit'm in deze regel in de js file:
var input = document.getElementsByTagName("input"); // alle inputvelden verzamelen
Hier worden teveel velden verzameld, denk ik. Ik moet dit beter doen, dus ik dacht:
var input = document.getElementsById("vinkje"); // alle inputvelden verzamelen
maar dit werkt op een of andere manier niet, ofschoon er toch elementen in de pagina zitten met id="vinkje". Vreemd dus.

Kan ik dit "filter" ook strakker zetten door alleen input velden te verzamelen van type=text, zodat de hidden fields niet meegenomen worden? Hoe ziet die javascript regel er dan uit?

Groeten Bert.


Ik heb wel een vermoeden waarom dat niet werkt. Je hebt 32 checkboxes, maar veel meer input velden. Daardoor wordt op een gegeven moment document.getElementById('vinkje33') aangeroepen en die bestaat niet

Het kan best zijn dat het script na zo'n fout stopt.
 
Ik moet dit beter doen, dus ik dacht:
var input = document.getElementsById("vinkje"); // alle inputvelden verzamelen
maar dit werkt op een of andere manier niet, ofschoon er toch elementen in de pagina zitten met id="vinkje". Vreemd dus.

Het idee van een "id" is dat er maar een element is met dat id. Daarom werkt dit niet als je meerdere elementen hetzelfde id geeft.

Als je weet dat er altijd maar 32 checkboxes zijn kan je dat natuurlijk hard in de code zetten: [js]for (var i = 0; i < 32; i++)[/js]
anders kan je gebruik maken van getAttribute
[js]var input = document.getElementsByTagName("input");
var checkboxes = new Array();
for (var i=0;i<input.length;i++)
{
if (input.getAttribute("type") == "checkbox")
{
checkboxes[count(checkboxes)] = input;
}
}[/js]
Hierna bevat de array "checkboxes" de checkboxes. Dit heb ik overigens niet getest, maar het *zou* moeten werken.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan