Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [js] dynamiczne przydzielanie 'punktów'
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
DeyV
Otrzymałem zadanie by przygotowac prosty formularz pozwalajacy na rozdysponowanie określonej liczby 'punktów' na ileś grup.
I zupełnie nie mam pomysłu jak to zrobić.

Dlatego chętnie wysłucham wszelkich propozycji, jak widzielibyście taki mechanizm:
mam np. 20 punktów oraz np. 3 dostępne grupy, do któych punkty muszą trafić.
Oznacza to, że może być tak, że user 'wrzuci' wszystkie 20 do 1 grupy, może być tak że da 10 do 1 grupy, 5 do 2 grupy itd.
Założenie jest takie, że:
a) nie może przydzielić wiecej niż x (tu 20) punktów
cool.gif musi przydzielić wyszstkie (domyślnie są w grupie 1)
c) jeśli włożył coś do 2 grupy, to muszą one w jakiś sposób opuścić 1.

Na jakiej zasadzie proponowalibyście zrobić taki mechanizm?
kszychu
Na pozór proste:
trzy inputy:
20
0
0
zmieniamy wartość w 2 z 0 na 1, automatycznie (onChange) zmienia sie wartosc pierwszego na 19,
zmieniamy na 50 alert('Kolo! nie przesadzaj!')
Ale idzmy dalej:
co, jesli juz mamy sytuację: 7 7 6
dokładamy do 3 to z którego ma teraz odjąć?.... Może po połowie z każdego z pozostałych? a może wszystko z 1 lub 2?
Chodzi mi o to, że trzeba tuściśle sprecyzować założenia, a sam skrypt to już później banał.
DeyV
Problem w tym, ze tuuser ma zadecydować, z którego koszyka wyjąć.
Dlatego zastanawiałem się nad tym, czy nie zrobić tego przy pomocy kilku selectó, pozwalajacych na przeżucenie z jednego do drugiego.
takie coś mogło by się sprawdzić przy paru 'punktach' jednak przy ich większej ilości, stanie się strasznie drażniące.

Czy można jeszcze inaczej?
scanner
W przypadku odjęcia przerzuciłbym wolne punkty do puli "do ryzdyspnowania" i ostrzegł, że nie wszystkie zostały przydzielone.
W ten sposób nie interesuje nas w tym momencie ilosc grup.
kszychu
Otóż to! A nierozdysponowane można dla grupy 1 (domyślnej).
marlowe
Witam,
hehe zainspirowałeś mnie tym tematem i postanowiłem wreszcie napisać sam jakiś skrypt w js (zawsze tylko zmieniałem gotowe). Siedzialem nad tym 55 minut (naprawdę! :D ale w końcu mi się udało. Z dumą ;) prezentuję więc skrypt, który spełnia ww. zadanie ale pewnie i tak będzie dla Ciebie nieprzydatny...
w head:
Kod
<script language="JavaScript"><!--

function czycalkowita() {

calkowita=/^d+$/;

if



((calkowita.test(document.dwadziescia.liczba1.value)==false)||(calkowita.test(document.dwadziescia.liczba2.value)==false)||(calkowita.test(document.dwadziescia.liczba3.value)==false))

{

  alert("Wprowadź liczbę całkowitą.");

}

else

{

  czydobrze();

}

}

function czydobrze() {

var suma=document.dwadziescia.liczba1.value+'+'+document.dwadziescia.liczba2.value+'+'+document.dwadziescia.liczba3.value

var rezultat=eval(suma)

if(rezultat==20) {

alert("Wszystko OK. Suma jest równa 20"); }

else if(rezultat<20) {

alert("Za mało. Musisz podać większą wartość dla którejś z grup"); }

else {

alert("Za dużo Musisz podać mniejszą wartość dla którejś z grup"); }

}

//--></script>

w body:
[xml:1:6d358775e8]Sprawdzanie, czy suma liczb podanych w trzech polach jest równa 20<p>
<form name="dwadziescia">
Grupa 1: <input type="text" name="liczba1" value="20"/><br/>
Grupa 2: <input type="text" name="liczba2" value="0"/><br/>
Grupa 3: <input type="text" name="liczba3" value="0"/><br/>
<input type="submit" name="ok" onclick="czycalkowita()"/>
<input type="reset" name="czysc"/>
</form>
</div>[/xml:1:6d358775e8]
Działający skrypt jest Tutaj.
Bardzo możliwe, że są tu błędy- wszelkie uwagi mile widziane.
Tak czy siak- fajny ten JavaScript, może się go wreszcie nauczę :D
A co do innych możliwości rozwiązania problemu to zgadzam się z przedstawionym sposobem- sam zacząłem pisać coś takiego ale niestety tu już moze możliwości nie wystarczyły ;)
Pozdrawiam
Bartek
Teodor
Witam

a moze cos takiego:
http://son.quake2.org/test/input.html

*powinno dzialac w IE - tylko ze nie mam jak sprawdzic :/

Pozdrawiam
marlowe
#Teodor: Nie wiem jak inni ale ja jestem impressed :) Dokładnie taki skrypt chciałem napisać ale mi nie wyszło. Wyrazu uznania :)
Pozdrawiam
Bartek
P.S. Działa pod IE, pod Operą. Nie działa pod Navigatorem :(
DeyV
Wielkie dzięki, chłopaki.
Wszystkie wasze pomysły bardzo mi się podobały, oraz zainspirowały do własnych działań (a przyznam szczerze, że wcześniej wogóle nie wiedziałem, jak sie za to zabrać)
Ostatecznie udało mi się zrobić coś takiego:
http://www.mstudio.nq.pl/php_pl/przyklady/...yczek/index.htm
(działa na IE i Mozilli)
scanner
DeyV: działa świetnie. W razie czego można się zgłosić po kod źródłowy?
hawk
Na Operze niestety w ogóle nie działa sad.gif Ale jeżeli ci to nie przeszkadza, to ok - nie krytykuję, tylko informuję.
DeyV
Cytat
W razie czego można się zgłosić po kod źródłowy?

Z js jest tak śmiesznie, że wszystko co jest opublikowane, jest publiczne winksmiley.jpg Ale oczywiście - dam Ci swoje błogosławieństwo.


Cytat
Na Operze niestety w ogóle nie działa
A to ciekawe. Zawsze miałem jakieś problemy z pisaniem skryptów pod operę, (zresztą chyba nie tylko ja) ale nie spodziewałem się że w sumie nie wykorzystujacy żadnych nietypowych funkcji skrypt będzie też robił taki problem. Dzięki za info.
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.