Avatar billede verakso Nybegynder
31. juli 2000 - 13:11 Der er 10 kommentarer og
2 løsninger

Dynamisk checkbox validering

Jeg har søgt lidt rundt her i Eksperten, men er ikke kommet en løsning op mit problem nærmere.

Jeg har en form med et ubekendt antal checkboxe (Den er dynamisk genereret), som jeg gerne vil lave et check på, om der er krydset minimum en box af.

Følgende kode har jeg fået bikset sammen til at markere eller afmarkere det dynamiske antal checkboxe, men har som skrevt ikke kunne hitte ud af at finde af lave en ValidateCheck funktion, og da det iritere mig grænseløst, er her 100 point.

function selectAll()
{
  with (document.forms[0])
  {
    for (i = 0; i < elements.length; i++)
    {
        if (elements[i].name == \"CheckboxID\")
        {
            elements[i].checked = true;
        }
    }
  }
}
function selectNone()
{
  with (document.forms[0])
  {
    for (i = 0; i < elements.length; i++)
    {
        if (elements[i].name == \"CheckboxID\")
        {
            elements[i].checked = false;
        }
    }
  }
}

<form>
  <input type=\"checkbox\" name=\"CheckboxID\" value=\"1\">
<input type=\"checkbox\" name=\"CheckboxID\" value=\"2\">
<input type=\"checkbox\" name=\"CheckboxID\" value=\"3\">
<input type=\"checkbox\" name=\"CheckboxID\" value=\"n\">
</form>
Avatar billede jumper Nybegynder
31. juli 2000 - 13:21 #1
function ValidateCheck(){
  var dfe = document.forms[0].elements;
  var dfl = dfe.length;
  var foundCheck = false
  for (var i=0; i<dfl; i++){
    if (dfe[i].type==\'checkbox\'&&dfe[i].checked){
      foundCheck = true;
      break;
    }
  }

  if (foundCheck){
    // Jaa, vi fandt en checkbox der var afkrydset
  } else {
    // Øøøv
  }
}

/Thor
Avatar billede erikjacobsen Ekspert
31. juli 2000 - 13:23 #2
Øv - for langsom .... må jeg supplere med et lidt simplere, samt hvad man skal skrive i <form>

<form name=\"f\" .... onsubmit=\"return mindsteen(document.f);\">

og

  function mindsteen(f) {
    for (i = 0; i < f.elements.length; i++)  {
          if (f.elements[i].name == \"CheckboxID\" && f.elements[i].checked) {
            return true;
          }
  }
  return false
  }
 
Avatar billede verakso Nybegynder
31. juli 2000 - 13:26 #3
Det var sgu noget hurtigt input man kan bruge til noget, jeg tjecker det lige ud.

BRB
Avatar billede olebole Juniormester
01. august 2000 - 02:36 #4
<ole>
verasko >> Undskyld, jeg lige bruger dit spørgsmål til at opklare noget for mig selv, men det kunne måske have almen interesse.

Erik >> Jeg har noteret mig, du tit laver dine valideringer på en \'onsubmit\'-handler. Stopper det submit-handlingen, hvis validerings funktionen returnerer \'false\'? Dvs: Ligger handlingen, der udløses af \'onsubmit\'-handleren før eller efter selve afsendelsen?
Jeg validerer altid selv med en <input type=\"button\"> med en \'onclick\'-handler - og lægger så en \'document.formNavn.submit();\' i slutningen af valideringsfunktionen. Det gør jeg for at være sikker på afsendelsen stoppes - men er det nødvendigt?
/Vh
</bole>
Avatar billede jumper Nybegynder
01. august 2000 - 04:46 #5
olebole, når du har deklareret en onsubmit event handler til din form, vil denne funktion blive udført før selve afsendelsen af formen.

Derefter vil formen blive afsendt hvis din funktion returnerer true, og gøre ingenting hvis du returnerer false.

Om du vil bruge onsubmit eller onclick/submit() er en enten/eller sag, enten det ene eller det andet! Når du laver en document.formNavn.submit(), vil den ikke udføre din onsubmit event handler funktion og når du laver en onsubmit event handler funktion submittes formen afhængigt af hvad du returnerer.

Så det er blot et spørgsmål om hvorhenne du víl validere din form.

/Thor
Avatar billede olebole Juniormester
01. august 2000 - 05:30 #6
Tak Thor.
Jeg var bare ikke klar over, om \'return false\' fra en funktion udløst af en \'onsubmit\'-handler stoppede submitting - det gør den altså! ;-)

Den anden sammenrodning ses jo af og til her på stedet, så det var nok meget godt lige at få det slået det fast igen.
/Vh
Avatar billede erikjacobsen Ekspert
01. august 2000 - 08:24 #7
Er det nu ligemeget? IE fyrer jo en submit af, hvis man trykker på retur i et tekstfelt.
Det bliver ikke fanget med Oles metode, men med min. Det er godt nok lidt tidligt på
dagen, men jeg tror nok at min er den \"eneste rigtige\"  ;-))
Avatar billede verakso Nybegynder
01. august 2000 - 08:34 #8
1. præmien gik til Erik, da den valgte metode ligger tæt på det jeg ønskde.
2. pladsen fik jumper, da hans løsning ligner meget den vej jeg selv var påvej med, men som skrevet så er Eriks den \'pæneste\'.
Desuden har jeg rodet lidt med onSubmit event handleren, og har nogle gange gjort ligesom Ole.
Ud over den grund som Erik påpeger, så holder jeg selv bedst af, at ense kode også er let tilgængelig for andre, dermed ensrettet, og da man hyppigst bruger submit buttons, er den bedst med en fast praksis at bruge onSubmit eventen.

/Verakso
Avatar billede verakso Nybegynder
01. august 2000 - 08:39 #9
Måske skulle jeg lige fylde op og poste hele svineriet, så andre måske kan lære noget...

<SCRIPT LANGUAGE=\"JavaScript\">
function selectAll() {
  with (document.forms[0]) {
    for (i = 0; i < elements.length; i++) {
        if (elements[i].name == \"ID\") {
            elements[i].checked = true;
        }
    }
  }
}
function selectNone() {
  with (document.forms[0]) {
    for (i = 0; i < elements.length; i++) {
        if (elements[i].name == \"ID\") {
            elements[i].checked = false;
        }
    }
  }
}
function validateCheck(f) {
    for (i = 0; i < f.elements.length; i++)  {
        if (f.elements[i].name == \"ID\" && f.elements[i].checked) {
            return true;
        }
    }
    alert(\'Please choose one or more\');
    return false
}

</SCRIPT>

<FORM name=SelectSome method=post....onSubmit=\"return validateCheck(this)\">
:
:
Select All<input type=\"radio\" name=\"mark\" onClick=\"selectAll()\" id=SelectAll>Remove All<input type=\"radio\" name=\"mark\"  onClick=\"selectNone()\" checked id=RemoveAll><BR>
<INPUT type=\"submit\" value=\"Select Some\" class=button id=submit name=submit>
</FORM>
Avatar billede jumper Nybegynder
01. august 2000 - 08:42 #10
Øv, kun 10 point? ;)

/Thor
Avatar billede erikjacobsen Ekspert
01. august 2000 - 11:16 #11
Ok - det var lidt tidligt på dagen.... Hvis der IKKE er en submit knap, vil IE4
ikke submitte formen ved tryk på retur. Men hvis der kun er ét tekstfelt, så vil
NS4.5 faktisk lave en submit, som ikke ville blive checket af en evt. onclick på
en button. Det var ikke helt så slemt som frygtet, men min
metode er \"mest rigtig\" - ;-)
Avatar billede olebole Juniormester
01. august 2000 - 14:07 #12
Erik >> Frygt ej...vi er hos dig  ;o))
Argumentet med NS faldt jeg jo som ventet pladask for...Hehe! Mine valideringsvaner er hermed under \'omformatering\'.
Tak, begge to.
/Vh
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester