Dodaj do ulubionych

JavaScript

26.03.07, 11:12
Witam,

'urodzil' mi sie maly problem, z ktorym nie moge sobie poradzic, choc
rozwiazanie moze byc banalnie proste tylko ja go nie widze(tak najczesniej
bywa :)).

Otoz mam zestaw checkbox'ow generowanych dynamicznie (php), do ktorego jest mi
potrzebne ograniczenie - uzytkownik powinien zaznaczyc maksimum dwa.

Chcialam zastosowac JS do zliczania zaznaczonych kwadracikow, czyli dla
kazdego kwadracika linia:

if (document.booking.slot1.checked){count++;}

i na onClick wywolanie funkcji.

Wszystko dziala pieknie, gdy jako nazwy kolejnych checkboxow wtawie j/w czyli
np. slot1, slot2 itd. Jednak ze wzgledu na to, iz formularz jest kawalkiem
wiekszego systemu, nazwy kolejnych checkbox'ow to kolejne elementy tablicy:
book[slots][0], book[slots][1] itd. I w tym momencie skrypt js nie dziala.
Probowalam wstawic te elementy jako lancuchy znakow, ale nie pomoglo.

Czy ktos mialby pomysl jak obejsc ten problem? Za nakierowujace sugestie z
gory dziekuje ;))





Z powodu


Obserwuj wątek
    • tommy_from_cracow Re: JavaScript 26.03.07, 16:15
      Hej,
      Kod jest OpenSource i mozemy go zobaczyc? Bylo by latwiej znacznie...
      Pozdrawiam!
      • kuzynka.edyta Re: JavaScript 26.03.07, 17:09
        Hej tommy,

        dzieki za odzew. no nie za bardzo z tym kodem, bo wszystko jest oparte na
        szablonach wiec strona, ktora widac przegladarce, to w zasadzie cztery pliki,
        (nie mowiac o bibliotekach ;)), ale sprobuje odpowiednie kawalki dla pogladu
        wypatroszyc.

        pozdr.
        • kuzynka.edyta zatem to wyglada mniej wiecej tak: 26.03.07, 17:44
          1. Kawalek z szablonu HTML, ktory zawiera funkcje js:

          <script type="text/javascript">

          function countChecked() {

          var count = 0;

          if (document.booking.slot1.checked){count++;}
          if (document.booking.slot2.checked){count++;}
          if (document.booking.slot3.checked){count++;}
          if (document.booking.slot4.checked){count++;}
          .......
          if (document.booking.slot20.checked){count++;}


          if (count == 3){
          alert('Sorry, you can book two sessions only.');
          document.book; return false;
          }

          }
          </script>

          ...
          <form action="book.pht" name="booking" method="POST">

          <!--{slots}--> // w miejsce tego 'placeholdera' pojawiaja sie checkboxy, w
          zrodle strony po jej wyrenderowaniu wyglada to tak:

          <ul class="nobullet">
          <li><input type="checkbox" name="book[slots][4]" value="4" onClick="return
          countChecked()" /> 10:00 - 10:20</li>
          <li><input type="checkbox" name="book[slots][5]" value="5" onClick="return
          countChecked()" /> 10:20 - 10:40</li>
          ...
          </ul>

          //Uwaga: zestaw checkboxow moze byc rozny, tzn. nie wszystkie od 0 do 20 sa
          generowane.

          <!--{book_buttons}--><!--{hidden}-->
          </form>

          cd. w drugim poscie
          • tommy_from_cracow Re: zatem to wyglada mniej wiecej tak: 28.03.07, 00:47
            Hej,
            Ciezko mi to posklejac i sprawdzic lokalnie ale,
            a odwolanie w DOM: document.booking, co oznacza "booking"?, po drugie czy nie prosciej bedzie przejsc przez checkboxy petla for?
            np.
            var count=0;
            var cB=document.getElementsByTagName("input");
            for(var i=0; i<count.cB;i++){
            if (cb[i].checked){
            count++
            }
            }
            nie jak zachowuje sie nadpisywanie zmiennej count, slabo znam JS...

            i dalej sprawdzasz ile wynosi count i odpowiednie bloki w zaleznosci od warunku.
            Pozdrawiam!
        • kuzynka.edyta .. cd. bo w jednym sie nie dalo 26.03.07, 17:45
          2. Od strony PHP:

          - kawalek z pliku obslugujacego formularz, odpowiedzialny za pojawienie sie
          checkboxow we wlasciwym miejscu:

          $page->setParameter("slots", $html->tickbox_list("book[slots]",
          $course->get_available_slots(), $row['slot']));

        • kuzynka.edyta .. cd2. co za upierdliwy system! 26.03.07, 17:46
          - funkcja tickbox_list() generujaca liste:

          function tickbox_list($name, $values, $selected) {
          $to_return = "<ul class=\"nobullet\">";
          // loop through the $values array
          foreach ($values as $key => $value) {

          // if the current $key is set in the $selected array
          if ($selected[$key] == true) {
          // mark this chekbox as ticked
          $checked = true;
          }
        • kuzynka.edyta .. cd3. reszta funkcji powyzej 26.03.07, 17:47
          $to_return .= "<li>".$this->tickbox_booking($name."[".$key."]", $key,
          $checked)." $value</li>";
          unset($checked);
          }
          // close the HTML list
          $to_return .= "</ul>";
          // return the HTML Source
          return $to_return;
          }

        • tommy_from_cracow Re: JavaScript 26.03.07, 17:48
          Hej, hej,
          Jak to tylko kwestia JS to mozesz podac link do strony jesli to mozliwe, js, podejze sobie. Dziewne wydaje mi sie a" odwolanie do DOM i warunek if(...){
          Pozdrawiam!
          • tommy_from_cracow Re: JavaScript 26.03.07, 17:50
            Pisalismy w tym samym momencie...
            Poaptzre i jak cos znajde dam znac.
            • kuzynka.edyta Re: JavaScript 26.03.07, 18:01
              sorki, ze tak po kawalkach, inaczej nie chcialo przyjac.

              za chwile uciekam, bo spoznie sie na pociag. zajrze na forum na jakies trzy
              godziny.

              poki co, milej resztki dnia.
              edyta
        • kuzynka.edyta .. cd4. ostatnia funkcja 26.03.07, 17:48
          - funkcja generujaca elementy listy:

          function tickbox_booking($name, $value ="", $checked ="") {
          $html = "<input type=\"checkbox\" name=\"".$name."\" value=\"".$value."\"
          onClick=\"return countChecked()\"";
        • kuzynka.edyta .. cd5 no nie moge 26.03.07, 17:49
          if ($checked) {
          $html .= " checked=\"checked\"";
          }
          $html .= " />";
          return $html;
          }

          z wyrazami wdziecznosci :)



Nie masz jeszcze konta? Zarejestruj się


Nakarm Pajacyka