ďťż
Podstrony
|
telcocafeKtoś mądry powie mi, jak sprawdzić kilka tablic na raz? Np. w skrypcie:function testuj(k) { for (i=0;i<k.tablica.length;i++) if (k.tablica[i].checked) var tablicac=1; if (tablicac!=1) { alert('Musisz wybrać jak¹œ opcję!'); return false; } return true; } Potem w formularzu: echo "<form name='generator' action='".basename($_SERVER['PHP_SELF'])."' method='POST' onsubmit='return testuj(this);'>"; // ... echo "<td style='border: 1px solid black; text-align: center' bgcolor='".$listkol[$i]."'><input type='radio' name='kolor1' value='".$listkol[$i]."'></td>"; Chodzi o to, żeby sprawdzić w kilku polach name='' formularza na raz. Użytkownik Kshyhoo edytował ten post 09 maj 2009, 21:38 spróbój coś takiego: function testuj() { //formularze; var forms = new Array(); forms[0] = document.forms['formularz1']; forms[1] = document.forms['formularz2']; for(i=0;i<forms.length;i++) { var tablica = forms[i].tablica; for(o=0;o<tablica.length;o++) { if(tablica[o].checked) var tablicac=1; if (tablicac!=1) { alert('Musisz wybrać jak¹œ opcję!'); return false; } } } return true; } Użytkownik PiKey edytował ten post 08 maj 2009, 13:54 Niestety, to nie działa. Trochę na końcu zamieszałem, bo formularz jest jeden, ale pętli jest kilka. Trzeba przeszukiwać name='kolor1', name='kolor2', name='kolor3', itd. Na jednej pętli ten mój JS zdaje egzamin, na więcej nie wiem, jak rozbudować. Nie znam JS. function testuj(k) { var ok = 0, tab = ['kolor1', 'kolor2', 'kolor3'], i, l1, j, l2; for (i = 0, l1 = tab.length; i < l1; i++) { for (j = 0, l2 = k.elements[tab[i]].length; j < l2; j++) { if (k.elements[tab[i]].checked) ok = 1; } if (!ok) { window.alert('Musisz wybrać jak¹œ opcję!'); return false; } } return true; } Coś drgnęło... znaczy się blokuje teraz wszystko i nie puszcza dalej ;) Może luknij o co biega tu, chodzi mi o krok drugi - przy czym może być opcja, że będzie tylko jedna linia kolorów do wyboru a może być, że i wszystkie... To wiesz co. W tym drugim kroku, jeśli nie ma koloru, to daj wartość value dla tych "pustych" radiobuttonów, np., none, a wtedy:function testuj(k) { var ok = 0, tab = ['kolor1', 'kolor2', 'kolor3'], i, l1, j, l2; for (i = 0, l1 = tab.length; i < l1; i++) { for (j = 0, l2 = k.elements[tab[i]].length; j < l2; j++) { if (k.elements[tab[i]].checked && k.elements[tab[i]].value != 'none') { ok = 1; break; } } if (!ok) { window.alert('Musisz wybrać jak¹œ opcję!'); return false; } } return true; } Nie działa. Blokuje nada wszystko. Tak wogóle, to te "puste radio" nie są potrzebne, ale bez nich jeszcze gorzej. Chyba całkiem zmienię koncepcję... EDIT: Pomyłka, puszcza wszytko... bez sprawdzenia. EDIT: Teraz mi nie puszcza, już przestaje kumać o co chodzi ! PYTANIE: czy to cyfry 11 i 12 oznaczają ilość elementów tablicy? Jeżeli tak, to ilość ich powinna być 18... może to sypie? Użytkownik Kshyhoo edytował ten post 08 maj 2009, 23:09 To jest mała litera L od length. Żeby tego nie mieszać, zmienię to, bo tutaj wydajność tak bardzo nie spadnie. Nie wiem, jaka jest koncepcja. Widzę tam, że dla pustych kolorów w kroku drugim jest wartość Array, czyli coś tam źle wstawiasz w skrypcie. Chcesz, by został wybrany minimum jeden kolor z tych wszystkich? W zależności od ilości, zmieniasz w funkcji podanej przeze mnie zawartość tablicy tab, która zawiera nazwy elementów radio, które mają być sprawdzane. Zaktualizuj pliczki na serwerze, jeśli będziesz mógł, to będę wiedział, jak to testujesz. A i jeden błąd się wkradł w mojej funkcjifunction testuj(k) { var ok, tab = ['kolor1', 'kolor2', 'kolor3'], i, j; for (i = 0; i < tab.length; i++) { ok = 0; for (j = 0; j < k.elements[tab[i]].length; j++) { if (k.elements[tab[i]].checked && k.elements[tab[i]].value != 'none') { ok = 1; break; } } if (!ok) { window.alert('Musisz wybrać jak¹œ opcję!'); return false; } } return true; } Zaktualizowane. Może napiszę jeszcze raz, o co chodzi, bo międzyczasie zmieniłem nieco koncepcję. W pierwszym kroku wybieram jakiś obrazek (jak widać, to działa) i ładuję do do sesji POSTem (obrazków będzie docelowo więcej). W drugim kroku, w zależności od stopnia podziału (zaplanowane od 1 do 16), nakładane będzie kilka kolorów (zaplanowane 18) - czyli może ktoś zapragnąć "wodotrysk" i będzie chciał właśnie 16 kolorów. Trzeba się w zależności od wybranego obrazka (to się da zrobić), załadować tyle pasków z kolorami, ile będzie pól do pokolorowania. Tu się zaczyna problem, bo trzeba sprawdzić różne ilości pasków z kolorem, od 1 do 16. Więc tak, jak podałem funkcję. Użytkownik ma wybrać dwa kolory, więc zmienna tab powinna wyglądać tak: tab = ['kolor1', 'kolor2'] Tylko, że to nie działa... Umieść w swoim przykładzie moją funkcję, a powiem Ci, co źle robisz, bo według mojej myśli, powinno to działaćfunction testuj(k) { var ok, tab = ['kolor1', 'kolor2', 'kolor3'], i, j; for (i = 0; i < tab.length; i++) { ok = 0; for (j = 0; j < k.elements[tab[i]].length; j++) { if (k.elements[tab[i]].checked) { ok = 1; break; } } if (!ok) { window.alert('Musisz wybrać jak¹œ opcję!'); return false; } } return true; } Dodane... No tak, ale nie zrobiłeś tego, o czym mówiłem. Zmienna tab powinna się zmieniać w zależności od ilości grup przycisków radio. Jeśli masz jedną grupę, to jest ['kolor1'], jeśli dwie, to ['kolor1', 'kolor2'] itd. Można to jeszcze inaczej zrobić, jeśli nazwy grup będą się zmieniały zachowując ten sam przedrostek. A skoro tak, tofunction testuj(k) { var ok, len = 3, i, j; for (i = 1; i <= len; i++) { ok = 0; for (j = 0; j < k.elements['kolor' + i].length; j++) { if (k.elements['kolor' + i].checked) { ok = 1; break; } } if (!ok) { window.alert('Musisz wybrać jak¹œ opcję!'); return false; } } return true; }Gdzie len, to ilość grup. Zrobiłem to wcześniej, jak testowałem. Teraz o tym zapomniałem. Testowałem tylko tę grupę z trzema grupami. Dalej nie chce mnie puścić... Uaktualniłem na serwerze. Użytkownik Kshyhoo edytował ten post 09 maj 2009, 21:52 Nie wiem, co robisz, ale gdy wybrałem dwa kolory, to w funkcji widzę, że przeszukiwane są trzy. Czy na pewno doczytałeś mój przedostatni post do końca? Użytkownik andrzej_aa edytował ten post 09 maj 2009, 22:32 Myślę, że tak. Kombinowałem za wszystkie sposoby i nie działa. Nawet wyłączyłem dwie wcześniejsze pętle i zostawiłem tylko tę potrójną... Nic to nie dało. Teraz mam tak: echo "<form name='generator' action='".basename($_SERVER['PHP_SELF'])."' method='POST' onsubmit='return testuj(this);'>"; echo "<table style='border: none'><tr>"; // tabela // switch $zmienna = $_POST['herby']; switch ($zmienna) { case "herb00.png": echo"<td>1</td>"; for ($i=0;$i<count($listkol);$i++) { if (!($i % 1)) echo ""; echo "<td style='border: 1px solid black; text-align: center' bgcolor='".$listkol[$i]."'><input type='radio' name='kolor1' value='".$listkol[$i]."'></td>"; } echo"<td>1</td>"; break; case "herb01.png": echo"<td>1</td>"; for ($i=0;$i<count($listkol);$i++) { if (!($i % 1)) echo ""; echo "<td style='border: 1px solid black; text-align: center' bgcolor='".$listkol[$i]."'><input type='radio' name='kolor1' value='".$listkol[$i]."'></td>"; } echo"<td>1</td>"; echo "</tr><tr>"; // tabela echo"<td>2</td>"; for ($i=0;$i<count($listkol);$i++) { if (!($i % 1)) echo ""; echo "<td style='border: 1px solid black; text-align: center' bgcolor='".$listkol[$i]."'><input type='radio' name='kolor2' value='".$listkol[$i]."'></td>"; } echo"<td>2</td>"; break; case "herb04.png": echo"<td>1</td>"; for ($i=0;$i<count($listkol);$i++) { if (!($i % 1)) echo ""; echo "<td style='border: 1px solid black; text-align: center' bgcolor='".$listkol[$i]."'><input type='radio' name='kolor1' value='".$listkol[$i]."'></td>"; } echo"<td>1</td>"; echo "</tr><tr>"; // tabela echo"<td>2</td>"; for ($i=0;$i<count($listkol);$i++) { if (!($i % 1)) echo ""; echo "<td style='border: 1px solid black; text-align: center' bgcolor='".$listkol[$i]."'><input type='radio' name='kolor2' value='".$listkol[$i]."'></td>"; } echo"<td>2</td>"; echo "</tr><tr>"; // tabela echo"<td>3</td>"; for ($i=0;$i<count($listkol);$i++) { if (!($i % 1)) echo ""; echo "<td style='border: 1px solid black; text-align: center' bgcolor='".$listkol[$i]."'><input type='radio' name='kolor3' value='".$listkol[$i]."'></td>"; } echo"<td>3</td>"; break; } echo "</tr></table><br /></div><br /><hr color='black' />"; // tabela /// echo "<input type='hidden' name='krok' value='3'>"; echo "<input type='submit' name='dalej2' value='IdÄ˝ dalej'></form>"; To trochę przekombinowany skrypt. Musisz policzyś liczbę grup i wstawić tę liczbę jako wartość zmiennej len w funkcji JS. Przkombinowany, ale inaczej się nie da ;p No i nie za bardzo kumam JS. Co radzisz? Użytkownik Kshyhoo edytował ten post 09 maj 2009, 23:22 Radzę Ci zrobić coś takiego, że zamiast przesyłać w pierwszym kroku nazwę pliku, to liczbę kolorów na danym herbie. Wtedy w kolejnym kroku tylko odczytasz dopowiedni plik i przy okazji będziesz miał liczbę dostępnych kolorów. Dzięki temu również będziesz mógł prawidłowo uzupełnić moją funkcję o ilość kolorów bez kombionowania. No i co jeszcze lepsze, będziesz mógł skrócić swój kod do niezbędnego minimum stosując parę linijek i pętlę. Mam nadzieję, że rozumiesz moją ideę. I tu jest problem, bo wpierw trzeba wybrać stopień podziału herbu. Oczywiście, nie musi to wcale być jakiś plik, może to być cokolwiek, co zidentyfikuje wybór, np. zmienna... |
|||
Sitedesign by AltusUmbrae. |