Przejdź do treści

Centrum Kształcenia Zawodowego i Ustawicznego w Mrągowie

JS: Masowe zaznaczanie pól formularza

poniedziałek,

JS: Masowe zaznaczanie pól formularza

Możliwość jednoczesnego zaznaczenia kilku kontrolek formularza to spore usprawnienie pracy użytkownika. Słowo „masowe” w tytule może wydać się przesadą, jednak prezentowane skrypty JavaScript bez najmniejszej modyfikacji będą działać na większej ilości pól, je dopisanych w kodzie HTML.

Przykład nr 1 – zaznaczanie wszystkich opcji

Zaznacz interesujące przedmioty

Kod HTML przykładu

<div id="tester-1">
  <p>Zaznacz interesujące przedmioty</p>
  <label><input type="checkbox"> zaznacz wszystkie</label>
  <label><input type="checkbox"> matematyka</label>
  <label><input type="checkbox"> język polski</label>
  <label><input type="checkbox"> wychowanie fizyczne</label>
</div>

Kod JavaScript przykładu

Sposób działania prezentowanego kodu jest bardzo prosty. Jeśli zaznaczono pierwszy checkbox, w pętli wszystkie pola tego typu kolejno mają modyfikowaną własność checked na true (co oznacza zaznaczenie).

document.querySelector('#tester-1 input').onchange = function() {
  if(this.checked) {
    var inputs = document.querySelectorAll('#tester-1 input');
    for (var i = 0; i < inputs.length; i++) {
      inputs[i].checked = true;
    }
  }
}

Przykład nr 2 – odwracanie zaznaczenia

Zaznacz interesujące przedmioty

Kod HTML przykładu

<div id="tester-2">
  <p>Zaznacz interesujące przedmioty</p>
  <label><input type="checkbox"> odwróć zaznaczenie</label>
  <label><input type="checkbox"> matematyka</label>
  <label><input type="checkbox"> język polski</label>
  <label><input type="checkbox"> wychowanie fizyczne</label>
</div>

Kod JavaScript przykładu

Odwrócenie zaznaczenia tylko pozornie jest trudniejszym zadaniem. „Odwrócenie” oznacza przyjęcie przeciwstawnej wartości własności checked, można to zrealizować poprzez ustawienie zaprzeczenia aktualnej wartości własności checked elementu (!inputs[i].checked).

document.querySelector('#tester-2 input').onchange = function() {
 var inputs = document.querySelectorAll('#tester-2 input');
 if(this.checked) {
  for (var i = 1; i < inputs.length; i++) {
    inputs[i].checked = !inputs[i].checked;
  }
 }
}

Przykład nr 3 – losowe zaznaczanie

Wybierz najnowszy system z wymienionych:

Jest wykorzystywany jako dodatkowa pamięć wspomagająca mechanizm stronicowania i pamięci wirtualnej:

Kod HTML przykładu

Zgodnie z zasadami elementy input dotyczące danej odpowiedzi mają takie same atrybuty name. W przykładzie występują dwa pytania.

<div id="tester-3">
  <div>
  <p>Wybierz najnowszy system z wymienionych:</p>
  <label><input name="p1" type="radio"> Ubuntu 10.10</label>
  <label><input name="p1" type="radio"> Debian 4.0</label>
  <label><input name="p1" type="radio"> MS-DOS 7.2</label>
  <label><input name="p1" type="radio"> Windows 7</label>
  <p>Jest wykorzystywany jako dodatkowa pamięć wspomagająca...</p>
  <label><input name="p2" type="radio"> pagefile.sys</label>
  <label><input name="p2" type="radio"> cmd.exe</label>
  <label><input name="p2" type="radio"> hiberfil.sys</label>
  <label><input name="p2" type="radio"> sysdm.cpl</label>
  </div>
  <button>Losowo wybierz odpowiedzi</button>
</div>

Kod JavaScript przykładu

Przyjęte rozwiązanie to dwa główne kroki. Najpierw w pierwszej pętli ustalono wszystkie unikalne atrybuty name kontrolek radio i zliczono ich ilości. W drugim kroku zastosowano kolejną pętlę, tym razem w każdym kolejnym przejściu w zmiennej i znalazł się jeden z unikalnych atrybutów name ustalonych w poprzednim kroku. W pętli początkowo pobierane są wszystkie elementy z takim samym atrybutem name (czyli wszystkie możliwe odpowiedzi na dane pytanie). Następnie pseudolosowo ustalany jest indeks zaznaczonego pola.

document.querySelector('#tester-3 button').onclick = function() {
  var uniq = [];
  var tmp;
  var inputs = document.querySelectorAll('#tester-3 input');
  for (var i = 0; i < inputs.length; i++) {
    uniq[inputs[i].name] || (uniq[inputs[i].name] = 0);
    uniq[inputs[i].name]++;
  }
  for(i in uniq) {
    tmp = document.querySelectorAll('#tester-3 input[name='+i+']');
    tmp[Math.floor(Math.random() * uniq[i])].checked = true;
  }
}
Artykuł: Staże w Hiszpanii

Staże w Hiszpanii

Artykuł: Conformité Européenne

Conformité Européenne

Artykuł: Display Stream Compression

Display Stream Compression

Artykuł: High Dynamic Range

High Dynamic Range

Artykuł: PiP i podobne technologie

PiP i podobne technologie

Nasze technikum

Technik informatyk

Szkoły dla dorosłych

Nasza szkoła

Pełna oferta edukacyjna

Oferta szkoły