Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [js] limit zaznaczeń dla pola checkbox + opis w ukrytym div'ie
Forum PHP.pl > Forum > Po stronie przeglądarki
cytrysek
Znalazłem taki kod :

  1.  
  2. <head>
  3. <script type="text/javascript">
  4. <!--
  5. function showMe (it, box) {
  6. var vis = (box.checked) ? "block" : "none";
  7. document.getElementById(it).style.display = vis;
  8. }
  9. //-->
  10. </script>
  11. </head>
  12.  
  13. <body>
  14.  
  15. <form>
  16. <input type="checkbox" name="modtype" value="value1"
  17. onclick="showMe('div1', this)" />value1
  18.  
  19. <input type="checkbox" name="modtype" value="value2"
  20. onclick="showMe('div1', this)" />value2
  21.  
  22. <input type="checkbox" name="modtype" value="value3"
  23. onclick="showMe('div2', this)" />value3
  24.  
  25. <input type="checkbox" name="modtype" value="value4"
  26. onclick="showMe('div3', this)" />value4
  27.  
  28. <input type="checkbox" name="modtype" value="value5"
  29. onclick="showMe('div4', this)" />value5
  30.  
  31. <div class="row" id="div1" style="display:none">Show Div 1</div>
  32. <div class="row" id="div2" style="display:none">Show Div 2</div>
  33. <div class="row" id="div3" style="display:none">Show Div 3</div>
  34. <div class="row" id="div4" style="display:none">Show Div 4</div>
  35. </form>
  36.  
  37. </body>
  38.  
  39. </html>



a jak zrobić, by ograniczyć możliwość zaznaczenia pola checkbox do np. 2 sztuk i jednocześnie dostać monit w stylu alert lub info że za dużo się zaznaczyłow - w ukrytym div'ie ?

Dodatkowo po zaznaczenieu np. 3 boxa w przypadku limitu na 2 możliwe, pole 3 się nie zaznaczy i nie pojawi się 3 opis z ukrytego diva?

Dzięki za pomoc.
PW
rafaelb
tak na szybko napisane , chyba o to Ci chodziło

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2.  
  3. <script type="text/javascript">
  4. <!--
  5. function showMe (it, box) {
  6. var ile = 0;
  7. var max = 2;
  8.  
  9. for (i = 0; i < document.forms[0].elements.length; i++) {
  10. if ((document.forms[0].elements[i].type == "checkbox") && (document.forms[0].elements[i].checked == true)) ile++;
  11. }
  12. if (ile>max){
  13. alert ("Wybrałeś za dużo \n\nMaksymalnie "+max);
  14. box.checked = false;
  15. return;
  16. }else{
  17. var vis = (box.checked) ? "block" : "none";
  18. document.getElementById(it).style.display = vis;
  19. }
  20. };
  21. //-->
  22. </head>
  23.  
  24. <input type="checkbox" name="modtype" value="value1" onclick="showMe('div1', this)" />value1
  25. <input type="checkbox" name="modtype" value="value2" onclick="showMe('div2', this)" />value2
  26. <input type="checkbox" name="modtype" value="value3" onclick="showMe('div3', this)" />value3
  27. <input type="checkbox" name="modtype" value="value4" onclick="showMe('div4', this)" />value4
  28. <input type="checkbox" name="modtype" value="value5" onclick="showMe('div5', this)" />value5
  29.  
  30. <div class="row" id="div1" style="display:none">Show Div 1</div>
  31. <div class="row" id="div2" style="display:none">Show Div 2</div>
  32. <div class="row" id="div3" style="display:none">Show Div 3</div>
  33. <div class="row" id="div4" style="display:none">Show Div 4</div>
  34. </form>
  35.  
  36. </body>
  37. </html>
lord_t
rafaelb A po co tam ta pętla? Co jeśli byś miał 1000 checkboxów? Za każdym ptaszkiem przelatywałbyś po 1000-elementowej tablicy?

Ja to widzę tak:
  1.  
  2. <script type="text/javascript">
  3. <!--
  4. var licznik=0;
  5. var max =2;
  6.  
  7. function showMe (it, box) {
  8. var vis="none";
  9.  
  10. if (box.checked) {
  11. if(licznik<max) {
  12. vis= "block";
  13. licznik++;
  14. }
  15. else{
  16. box.checked=false;
  17. document.getElementById('divAlert').style.display="block";
  18. }
  19. }
  20. else{
  21. licznik--;
  22. document.getElementById('divAlert').style.display="none";
  23. }
  24. document.getElementById(it).style.display = vis;
  25. }
  26. //-->
  27. </head>
  28.  
  29.  
  30. <input type="checkbox" name="modtype" value="value1"
  31. onclick="showMe('div1', this)" />value1
  32.  
  33. <input type="checkbox" name="modtype" value="value2"
  34. onclick="showMe('div1', this)" />value2
  35.  
  36. <input type="checkbox" name="modtype" value="value3"
  37. onclick="showMe('div2', this)" />value3
  38.  
  39. <input type="checkbox" name="modtype" value="value4"
  40. onclick="showMe('div3', this)" />value4
  41.  
  42. <input type="checkbox" name="modtype" value="value5"
  43. onclick="showMe('div4', this)" />value5
  44.  
  45. <div id="divAlert" style="display:none">Można zaznaczyć tylko 2 checkboxy!</div>
  46. <div class="row" id="div1" style="display:none">Show Div 1</div>
  47. <div class="row" id="div2" style="display:none">Show Div 2</div>
  48. <div class="row" id="div3" style="display:none">Show Div 3</div>
  49. <div class="row" id="div4" style="display:none">Show Div 4</div>
  50. </form>
  51.  
  52. </body>
  53.  
  54. </html>
cytrysek
Dziękuję.
Bardzo ładnie działa smile.gif
pzdr.
PW

Witam ponownie.

Potrzebuje dodać jeszcze jedną funkcjonalność do tego skryptu.
A mianowicie, potrzebuje wrzucic wartosci value z kazdego zaznaczonego checkboxa do jednego pola input, wartosci oddzielone jakims separatorem, np srednikiem.
Do tej pory robilem to tak:

  1. <script language="javascript" type="text/javascript">
  2. <!--
  3. onload= function(){
  4. var d=document.forms[0],w=d.length;
  5. while(w--){
  6. if(d[w].type=="checkbox"){
  7. d[w].onclick=function(){
  8. var f=this.form,x=f.length,temp=[];
  9. while(x--){
  10. if(f[x].type=="checkbox" && f[x].checked){
  11. temp.push(f[x].value);
  12. }
  13. }
  14. this.form.hiddenZbiorczo.value=temp.join("; ");
  15. }
  16. }
  17. }
  18. }
  19. -->
  20. </script>
  21. ....
  22. <input name="hiddenZbiorczo" value=" " type="text" size="50" readonly="true">


takie coś daje mi w value wartosci typu: "value3;value4;..." w zaleznosci jaki checkbox zostanie zaznaczony - przenosi jego wartosc i separuje ";"

Tyle, że nie działa mi to razem z poprzedmin skryptem, tzn nie pokazują sie juz ukryte divy.

A moze by te 2 rzeczy jakos ladnie pogodzić?
Ktoś pomoże?

Dzięki.
PW
lord_t
Nie działa ponieważ w 1. skrypcie przypisujesz do elementów formularza, dla zdarzenia onclick, funkcję showMe(..).
W 2. skrypcie zmieniasz funkcję przypisaną do zdarzenia onclick => showMe już tam nie ma.

Rozwiązanie?
Proponowałbym do showMe dopisać dodawanie/odejmowanie do tablicy temp[]. Tam też zrobić przepisywanie temp do inputa (hiddenZbiorczo).
A deklarację tablicy temp[] zrobić za:

Kod
var licznik=0;
var max =2;
c3l3r1on
Witam,

Sorry ze odswiezam tak stary temat, jednak chcialbym sie spytac jak wyswietlic zmienna licznik, czyli tak aby np po zaznaczeniu 1 checkboxa wyswietlilo mi ze "1 zaznaczony", a przy 2 ( oczywiscie wczesniej zmieniajac max=2 na np 5), "2 zaznaczone" itd itp.

Teoretycznie wiem jak to wyswietlic, jednak niewiem gdzie to wkleic aby dzialalo
Kod
<script>document.write("Zaznaczono " + licznik + " checkbox'ów.");</script>



Pozdrawiam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.