[Javascript] Controle of minstens 1 checkbox aangevinkt is

Pagina: 1
Acties:
  • 193 views sinds 30-01-2008
  • Reageer

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Ik heb het volgende form:
HTML:
1
2
3
4
5
6
<form name="promo" action="/admin" method="post">
<input type="checkbox" name="delete[]" value="1"> Verhaal 1
<input type="checkbox" name="delete[]" value="2"> Verhaal 2
<input type="checkbox" name="delete[]" value="3"> Verhaal 3
<input type="button" onclick="check();" value="Verzenden">
</form>


Als de gebruiker op "Verzenden" klikt, wil ik eerst controleren of hij tenminste 1 checkbox heeft aangevinkt. Ik heb al verschillende dingen geprobeerd (onder andere dmv gevonden posts in de search), maar niets van dit werkt:
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
var items = document.forms["promo"].elements["delete[]"];
var aantal = items.length;

if (aantal > 0) { // verzenden...

******

if (document.forms["promo"].elements["delete[]"].checked == true) {

******

document.getElementByID[delete].checked == true) {


Wie kan mij wat verder helpen? Mijn ideeen raken op ;)

[ Voor 52% gewijzigd door Reveller op 10-08-2004 15:15 ]

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • André
  • Registratie: Maart 2002
  • Laatst online: 18-05 16:30

André

Analytics dude

De makkelijkste manier is:

code:
1
2
3
4
5
6
7
8
9
<form name="promo" action="/admin" method="post">
  <input type="checkbox" name="delete1" value="1"> Verhaal 1
  <input type="checkbox" name="delete2" value="2"> Verhaal 2
  <input type="checkbox" name="delete3" value="3"> Verhaal 3
  <input type="button" onclick="check();" value="Verzenden">
</form>

f = document.forms["promo"]; 
if ((f.elements["delete1"].checked) || (f.elements["delete2"].checked) || (f.elements["delete3"].checked)) { // verzend }

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 13:54

crisp

Devver

Pixelated

JavaScript:
1
2
3
4
5
6
7
function check(form) {
  var el = form.elements['delete[]'], checked=false, i;
  if (i=el.length) while (i--) if (el[i].checked) { checked=true; break; }
  else checked = el.checked;
  if (!checked) alert('niets aangevinkt!');
  return checked;
}

HTML:
1
2
3
4
5
6
<form action="/admin" method="post" onsubmit="return check(this)">
<input type="checkbox" name="delete[]" value="1"> Verhaal 1
<input type="checkbox" name="delete[]" value="2"> Verhaal 2
<input type="checkbox" name="delete[]" value="3"> Verhaal 3
<input type="submit" value="Verzenden">
</form>

Intentionally left blank


  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
@André - ik heb mijn formvariabelen graag in een array, maar toch bedankt! :)
@Crisp - ook bededankt voor jouw antwoord, maar ik heb nog een probleem: jouw script werkt niet als het form slechts 1 checkbox heeft - hij returned dan altijd "niets aangevinkt!". Ditzelfde probleem ben ik al vele keren in de search tegengekomen, maar heb er geen goed antwoord op kunnen vinden. Heb jij nog ideeen?

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Verwijderd

je kan natuurlijk een extra check inbouwen en dan in de else de code van crisp uitvoeren.

code:
1
2
3
4
if(!form.elements['delete[]'].length){
    if(form.elements['delete[]'].checked)
       checked++;
}


is blijkbaar dus niet nodig :) ty, Crisp

[ Voor 15% gewijzigd door Verwijderd op 10-08-2004 16:28 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 13:54

crisp

Devver

Pixelated

misschien nog wat haakjes zetten (ik heb het zelf niet getest), maar ik had er wel degelijk rekening mee gehouden:
JavaScript:
1
2
3
4
5
6
7
8
function check(form) {
  var el = form.elements['delete[]'], checked=false, i;
  if (i=el.length) {
    while (i--) if (el[i].checked) { checked=true; break; }
  } else checked = el.checked;
  if (!checked) alert('niets aangevinkt!');
  return checked;
}

[ Voor 7% gewijzigd door crisp op 10-08-2004 16:21 ]

Intentionally left blank


  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
@Crisp - wat vaag?! Nu doet 'ie het inderdaad wel...maar als de code zelf gelijk blijft, en javascript geeft geen syntax error als je hem zonder haakjes uitvoert, waarom is de werking met en zonder haakjes dan toch verschillend? Vooralsnog bedankt hoor!

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • André
  • Registratie: Maart 2002
  • Laatst online: 18-05 16:30

André

Analytics dude

Reveller schreef op 10 augustus 2004 @ 16:26:
@Crisp - wat vaag?! Nu doet 'ie het inderdaad wel...maar als de code zelf gelijk blijft, en javascript geeft geen syntax error als je hem zonder haakjes uitvoert, waarom is de werking met en zonder haakjes dan toch verschillend? Vooralsnog bedankt hoor!
Zie dit:

JavaScript:
1
2
3
4
5
6
7
8
9
if (bla)
  Stap1();
  Stap2();

if (bla)
{
  Stap1();
  Stap2();
}

In het eerste geval doet hij alleen Stap1 als bla true is, in het 2de geval doet hij beide stappen alleen als bla true is. In het voorbeeld van crisp gaat het om de else die nu bij een andere if 'hoort'.

[ Voor 7% gewijzigd door André op 10-08-2004 16:32 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 13:54

crisp

Devver

Pixelated

Reveller schreef op 10 augustus 2004 @ 16:26:
@Crisp - wat vaag?! Nu doet 'ie het inderdaad wel...maar als de code zelf gelijk blijft, en javascript geeft geen syntax error als je hem zonder haakjes uitvoert, waarom is de werking met en zonder haakjes dan toch verschillend? Vooralsnog bedankt hoor!
ambiguiteit; de parser kon niet zien bij welke if nou de else hoorde en nam aan dat hij bij de 2e if hoorde :)

Intentionally left blank


  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
@Andre, @Crisp - nou bedankt! ik heb me nog niet erg in javascript verdiept tot nu toe, maar zie nu dat ik een boel van mijn scriptjes een heel stuk korter (en vooral: overzichtelijk!) kan maken door er de nodige {haakjes} uit te slopen :D

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 13:54

crisp

Devver

Pixelated

maar niet teveel eruit slopen hè ;)

Intentionally left blank

Pagina: 1