Toon posts:

[js] arrays + disable

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik voel me echt heel schuldig dat ik dit niet zelf opgelost krijg :X
Ik heb een aantal checkboxes en dan komt er bij iedere checkbox bijv:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
function Check1A() {
if (Iq.check1a.checked == true) {
document.getElementById('check1b').disabled = true;
document.getElementById('check1c').disabled = true;
document.getElementById('check1d').disabled = true;
}

else {
document.getElementById('check1b').disabled = false;
document.getElementById('check1c').disabled = false;
document.getElementById('check1d').disabled = false;
}
}

en bij de checkbox een onClick=check1a(). Nu heb ik uiteindelijk 40 checkboxes die ik wil controleren, dus dit wordt nogal wat werk (aka: een shitload aan script, duurd lang bij laden). Ik denk (weet?) dat het in arrays kan, maar ik kom er echt niet op hoe :?. Kan iemand me even een zetje de goede richting in geven?

[ Voor 8% gewijzigd door Verwijderd op 26-03-2004 22:42 ]


  • André
  • Registratie: Maart 2002
  • Laatst online: 26-05 00:33

André

Analytics dude

Gebruik getElementsByTagname("checkbox") om alle checkbixen op te vragen. Of bedoel je het anders?

  • paragon
  • Registratie: April 2000
  • Laatst online: 25-05 18:03
ik zou het gewoon in een loopje doen...

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 21-02 23:50
Deze functie heb ik toevallig van de week nog geschreven, als ik het goed begrijp wil je hetzelfde als wat deze bereikt. 1 checkbox aanvinken vinkt alle checkboxes uit een bepaalde groep aan.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  function setCheckboxes(form, target, source)
  {
    var tgform = document.forms[form];
    for (i = 0; i < tgform.elements.length; i++) 
    {
      if(tgform.elements[i].name == source)
      {
        var tsource = i;
      }
      if(tgform.elements[i].name == target+'[]')
      {
        tgform.elements[i].checked = tgform.elements[tsource].checked;
      }
    }
    return true;
  }


form = ID van het form
target = name van targetboxes (targetboxes moeten dus wel allemaal dezelfde name hebben.
source = name van de 'master' checkbox.

Als je een beetje speelt met deze functie zal je het vast wel zo kunnen ombouwen zodat je er zelf wat aan hebt...

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Verwijderd

Topicstarter
Grijze Vos schreef op 27 maart 2004 @ 05:19:
Deze functie heb ik toevallig van de week nog geschreven, als ik het goed begrijp wil je hetzelfde als wat deze bereikt. 1 checkbox aanvinken vinkt alle checkboxes uit een bepaalde groep aan.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  function setCheckboxes(form, target, source)
  {
    var tgform = document.forms[form];
    for (i = 0; i < tgform.elements.length; i++) 
    {
      if(tgform.elements[i].name == source)
      {
        var tsource = i;
      }
      if(tgform.elements[i].name == target+'[]')
      {
        tgform.elements[i].checked = tgform.elements[tsource].checked;
      }
    }
    return true;
  }


form = ID van het form
target = name van targetboxes (targetboxes moeten dus wel allemaal dezelfde name hebben.
source = name van de 'master' checkbox.

Als je een beetje speelt met deze functie zal je het vast wel zo kunnen ombouwen zodat je er zelf wat aan hebt...
Ik bedoelde inderdaad met for loopjes, vergeten te zeggen :X. Ik wilde ze overigens niet allemaal checken, maar alle disablen behalve degene die checked is, maar ik denk dat ik dit script wel aan kan passen om dat te doen
mijn dank is groot _/-\o_
edit:
Ik ben nu een btje aan het klungelen met het script maar ik krijg het niet zo aangepast dat het voor mij werkt, aangezien de source geen andere naam mag hebben dan alle andere checkboxes (alle antwoorden moeten immers aangekrijst kunnen worden, bij elke vraag 1 iig).

[ Voor 21% gewijzigd door Verwijderd op 27-03-2004 09:45 ]


  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Begrijp ik je nu goed als je er per vraag maar 1 antwoord mogelijk is? Zo ja, waarom gebruik je dan geen radio's?

Anyway, ander voorbeeldje met checks:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<script type='text/javascript'>
function checkMe(oCheckbox)
{
  var oCheckGroup = oCheckbox.parentNode;
  var aInputs = oCheckGroup.getElementsByTagName('INPUT');
  for (var i=0; i < aInputs.length; i++)
  {
    if (aInputs[i].name != oCheckbox.name)
    {
      aInputs[i].checked = false;
    }
  }
}
</script>
<form>
  <fieldset>
    <input type='checkbox' name='check1a' onclick='checkMe(this)' /><br />
    <input type='checkbox' name='check1b' onclick='checkMe(this)' /><br />
    <input type='checkbox' name='check1c' onclick='checkMe(this)' /><br />
  </fieldset>
  <fieldset>
    <input type='checkbox' name='check2a' onclick='checkMe(this)' /><br />
    <input type='checkbox' name='check2b' onclick='checkMe(this)' /><br />
    <input type='checkbox' name='check2c' onclick='checkMe(this)' /><br />
  </fieldset>
</form>

[ Voor 45% gewijzigd door Annie op 27-03-2004 10:16 ]

Today's subliminal thought is:


Verwijderd

Topicstarter
Annie schreef op 27 maart 2004 @ 10:15:
Begrijp ik je nu goed als je er per vraag maar 1 antwoord mogelijk is? Zo ja, waarom gebruik je dan geen radio's?

Anyway, ander voorbeeldje met checks:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<script type='text/javascript'>
function checkMe(oCheckbox)
{
  var oCheckGroup = oCheckbox.parentNode;
  var aInputs = oCheckGroup.getElementsByTagName('INPUT');
  for (var i=0; i < aInputs.length; i++)
  {
    if (aInputs[i].name != oCheckbox.name)
    {
      aInputs[i].checked = false;
    }
  }
}
</script>
<form>
  <fieldset>
    <input type='checkbox' name='check1a' onclick='checkMe(this)' /><br />
    <input type='checkbox' name='check1b' onclick='checkMe(this)' /><br />
    <input type='checkbox' name='check1c' onclick='checkMe(this)' /><br />
  </fieldset>
  <fieldset>
    <input type='checkbox' name='check2a' onclick='checkMe(this)' /><br />
    <input type='checkbox' name='check2b' onclick='checkMe(this)' /><br />
    <input type='checkbox' name='check2c' onclick='checkMe(this)' /><br />
  </fieldset>
</form>
Mijn dank is wederom groot _/-\o_

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:45

crisp

Devver

Pixelated

Het lijkt me toch makkelijk ivm output-verwerking dat je toch dezelfde name gebruikt voor een set mogelijke antwoorden; je zou dus ook zoiets kunnen doen:

HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<html>
<head>
<title>IQ-test</title>
<script type="text/javascript">

function check(it) {

  var el = document.getElementsByName(it.getAttribute('name')), i = el.length;
  while (i--) if (el.item(i) != it) el.item(i).setAttribute('disabled', 'true');

}

</script>
</head>
<body>
<form id="iq" action="#">
  <fieldset>
    <legend>vraag 1</legend>
    <dl>
      <dt>Wie is er geen moderator W&G?</dt>
      <dd>
        <ul style="list-style-type: upper-alpha">
          <li><input type="checkbox" value="a" name="vraag[1]" onclick="check(this)" />crisp</li>
          <li><input type="checkbox" value="b" name="vraag[1]" onclick="check(this)" />Pelle</li>
          <li><input type="checkbox" value="c" name="vraag[1]" onclick="check(this)" />André</li>
          <li><input type="checkbox" value="d" name="vraag[1]" onclick="check(this)" />Bosmonster</li>
        </ul>
      </dd>
    </dl>
  </fieldset>
</form>
</body>
</html>


Maar ik heb eigenlijk dezelfde vraag als Annie: waarom gebruik je geen radio-buttons?

Intentionally left blank


  • benoni
  • Registratie: November 2003
  • Niet online
Of zoiets (dit gebruik ik omdat het flexibel is in te zetten, voor uiteenlopende formulieren). BTW, deze kan op details nog wel wat netter denk ik.


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
function check(form) {
    if (form) {
        for (var x = 0; x < form.length; x++) {
            if (form[x].whatif && form[x].whatthen) {
                if (work(form[x].whatif, form[x])) {
                    work(form[x].whatthen, form[x]);
                }
                else if (form[x].whatelse) {
                    work(form[x].whatelse, form[x]);
                }
            }
        }
    }
    return true;
}

function work(have, that) {
    if (have && that) {
        var grep = new RegExp("^this([^a-zA-Z0-9_])|
                    ([^a-zA-Z0-9_])this([^a-zA-Z0-9_])|([^a-zA-Z0-9_])this$", "g");
        var code = String(have).replace(grep, "$2$4that$1$3");
        return eval(code);
    }
    return false;
}

<input type="checkbox" name="master" onchange="check(this.form);" />
<input type="checkbox" name="dependant" whatif="!this.form.master.checked" 
    whatthen="this.checked=0; this.disabled=true" whatelse="this.disabled=false" />

[ Voor 10% gewijzigd door benoni op 27-03-2004 10:45 ]


Verwijderd

Topicstarter
crisp schreef op 27 maart 2004 @ 10:31:
Het lijkt me toch makkelijk ivm output-verwerking dat je toch dezelfde name gebruikt voor een set mogelijke antwoorden; je zou dus ook zoiets kunnen doen:

HTML:
1
*knip*


Maar ik heb eigenlijk dezelfde vraag als Annie: waarom gebruik je geen radio-buttons?
dit werkt in principe goed, maar dan moet er nog even een functietje bij dat hij de checkboxes disabled = false doet als checked = false. Ik wilde het met checkboxes doen omdat ik mezelf min of meer aan het trainen ben om dingen met for loops en arrays op te lossen (ik krijg het maar niet door 8)7), maar ik kon er niet tegen dat het in dit geval niet lukte, dus heb ik het maar gepost. Ik ga trouwens wel voor de oplossing van Annie, ziet er wat "schoner" uit dan disable's :)

[ Voor 57% gewijzigd door Verwijderd op 27-03-2004 13:30 ]

Pagina: 1