Autor Zpráva
Martin02
Profil
Ahoj,
potřeboval bych, aby když na něco kliknu, zaškrtlo se políčko (input type checkbox). Zkoušel jsem to takhle, ale nešlo mi to, nevíte někdo proč?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>
  <body>
      <input type="checkbox" name="n1"><br />
      <input type="button" onclick="document.getElementByName('n1').checked = true;">
  </body>
</html>

děkuji
DarkMeni
Profil
Ono to najde elementy s názvel n1, kterých může být víc, takže buď napsat i jeho index:
document.getElementsByName('n1')[0].checked = 'checked';//Nevim jak se bude prohlížeč chovat, když narazí na logickou hodnotu true
A nebo mu přidat ještě id, to má být unikátní, takže tam index nepotřebuješ:
<element id="idecko">
<element2 onclick="document.getElementById('idecko').checked = 'checked';">
Fisir
Profil
Reaguji na Martina02 [#1]:
Používá se getElementsByName. Tobě chybí „s“. A musíš zapsat i index elementu, protože jich se stejným name může být více. (Nebo použít id a s indexem se nebudeš muset trápit.)

Reaguji na DarkMeniho [#2]:
Nevim jak se bude prohlížeč chovat, když narazí na logickou hodnotu true
Alespoň mému Chromu logická hodnota nevadí.
Martin02
Profil
Moc děkuji, tohle vyřešilo jeden problém, ale pak jsem si chtěl udělat funkci, která takhle zaškrtne 10 checkboxů. To už mi nešlo :(

<html>
  <script type="text/javascript">
    function projdi() {
      for(i = 1; i <= 10; i++) {
        var name = "n" + i;
        var cislo_pole = i - 1;
        var pole = document.getElementsByName(name)[cislo_pole];
        pole.checked = "checked";
      }
    } 
  </script>
  <input type="checkbox" name="n1"><br />
  <input type="checkbox" name="n2"><br />
  <input type="checkbox" name="n3"><br />
  <input type="checkbox" name="n4"><br />
  <input type="checkbox" name="n5"><br />
  <input type="checkbox" name="n6"><br />
  <input type="checkbox" name="n7"><br />
  <input type="checkbox" name="n8"><br />
  <input type="checkbox" name="n9"><br />
  <input type="checkbox" name="n10"><br />
  <input type="button" value="Projít" onclick="projdi()">
</html>

Proč?
Fisir
Profil
Reaguji na Martina02 [#4]:
Co takhle:
<html>
  <script type="text/javascript">
    function zaskrtni() {
        document.getElementById("n1").checked = true;
        document.getElementById("n2").checked = true;
        document.getElementById("n3").checked = true;
        document.getElementById("n4").checked = true;
        document.getElementById("n5").checked = true;
        document.getElementById("n6").checked = true;
        document.getElementById("n7").checked = true;
        document.getElementById("n8").checked = true;
        document.getElementById("n9").checked = true;
        document.getElementById("n10").checked = true;
    } 
  </script>
  <input type="checkbox" id="n1"><br />
  <input type="checkbox" id="n2"><br />
  <input type="checkbox" id="n3"><br />
  <input type="checkbox" id="n4"><br />
  <input type="checkbox" id="n5"><br />
  <input type="checkbox" id="n6"><br />
  <input type="checkbox" id="n7"><br />
  <input type="checkbox" id="n8"><br />
  <input type="checkbox" id="n9"><br />
  <input type="checkbox" id="n10"><br />
  <input type="button" value="Projít" onclick="zaskrtni()">
</html>
Martin02
Profil
To mě také napadlo, ale určitě by to šlo i jednodušeji ne? A navíc, musí to být dělané přes name, ne přes id
Fisir
Profil
Reaguji na Martina02 [#6]:
musí to být dělané přes name, ne přes id
Tak těm prvkům nastav name i id.
panther
Profil
Martin02:
<script type="text/javascript">
  function projdi() {
    var name = "n[]";
    var pole = document.getElementsByName(name);

    for(i = 0; i < pole.length; i++) {
      pole[i].checked = "checked";
    }
  }
</script>

<input type="checkbox" name="n[]"><br>
<input type="checkbox" name="n[]"><br>
<input type="checkbox" name="n[]"><br>
<input type="checkbox" name="n[]"><br>
<input type="checkbox" name="n[]"><br>
<input type="checkbox" name="n[]"><br>
<input type="checkbox" name="n[]"><br>
<input type="checkbox" name="n[]"><br>
<input type="checkbox" name="n[]"><br>
<input type="checkbox" name="n[]"><br>
<input type="button" value="Projít" onclick="projdi()">

Použij pro pojmenování inputů pole, použití indexů znamená téměř vždy špatný návrh aplikace. Navíc, při změně počtu inputů nebudeš muset měnit rozsah v JS.
Tori
Profil
Martin02:
Můžete využít toho, že všechny zaškrtávátka patří do stejného formuláře:
<input type="button" value="Projít" onclick="projdi(this.form)">
function projdi(f) { // fce dostane odkaz na formulář s checkboxy
  for(i = 1; i <= 10; i++) {
    if (f["n"+i]) { // ochrana proti tomu, že bude některé číslo (třeba "n5") chybět
      f["n"+i].checked = true;
    }
  }
} 

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: