Autor Zpráva
koudelacek
Profil *
Dobrý den, javascriptům nerozumím a potřebuji poradit jak spočítat hodnotu ze tří inputů formuláře ( aby se to měnilo podle toho, co uživatel vypíše ) a pokud by to bylo jen trochu možné, aby si to vybíralo jen čísla, kdyby náhodou zadal uživatel číslo s mezerou, tečkou apod. Formulář vypadá takto:

   <tr>
      <td class="bold">Volba platby</td>
      <td class="right">
PLATBA PŘEDEM<input class="radio" name="pay" type="radio" checked="checked" value="paybefore" />V tomto případě platí standartní poplatek 10% z celkové výhry.<br />
PLATBA PO UKONČENÍ SOUTĚŽE<input class="radio" name="pay" type="radio" value="payafter" />V tomto případě platí zvýšený poplatek 14% z celkové výhry.<br />
</td>
    </tr>
    <tr>
      <td class="bold">1. MÍSTO</td>
      <td><input class="dark" name="first_place" type="text" /></td>
    </tr>
    <tr>
      <td class="bold">2. MÍSTO*</td>
      <td><input name="second_place" type="text" /></td>
    </tr>    
    <tr>
      <td class="bold">3. MÍSTO*</td>
      <td><input name="third_place" type="text" /><input name="prize" type="text" /></td>
    </tr>
    <tr>
      <td class="bold">Doplňové služby</td>
      <td class="right">Zvýhodněné umístění <input class="check" name="top" type="checkbox" /> Za tuto službu činí poplatek 2% z celkové výhry.<br />
        Dvojnásobná délka zobrazení projektu</strong><input class="check" name="top" type="checkbox" />Prodlouží projekt na 20 dnů. Poplatek činí 1%.</td>
    </tr> 

Částky budou udané v polích first, second a third prize, ty se spočítají a podle toho jestli je zaškrknuto platba předem nebo platba potom a jeste jsou zaškrknuty nějaké další služby to spočítá ty % ze součtu ceny co tam uživatel zadal.
Př.
platba předem - 10%
1.místo - 5000
2.místo - 3000
3.místo - 2000
+ zaskrknul zvyhodnene umisteni - 2%
Celkove to v poli ceny tedy vypise: 1.200 Kč ( 5000+3000+2000 * 12 / 100 )

Děkuji moc za každou radu, našel jsem něco podobného pouze jako formulář s inputy apod. byl bych rád spíše za konkrétní kódy než jen odkazy. Budu vděčný.

Moderátor Davex: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
Darker
Profil
Kód ti zde nenapíšu, ale budeš potřebovat následující věci:
1. Nahrazení nečíselných znaků:
var jencisla = text.replace(/[^0-9\.]/g, "");
2. Spuštění funkce při psaní:
<input type="text" onkeypress="funkce();" />
<input type="checkbox" onclick="funkce();" />
3. Zízkání hodnoty inputu:
<form id="formular" method="post"> <input type="text" id="prvni" name="pole" /></form>
var input = document.getElementById("formular").pole;
/*nebo*/
input = document.getElementsByName("pole")[0];
/*nebo*/
input = document.getElementById("prvni");
4. Zaokrouhlování:
var hodnota = 59;
var celkem = 111;
var procenta = Math.round((hodnota/celkem)*100*100)/100; //na DVE desetinna mista
5. Změna obsahu elementu - např. vypsání aktuáního výsledku toho, co počítáš (ať je to co chce):
var element = document.getElementById("element");
var vysledek = pocitejKraviny();
//Pokud je formularovy prvek
element.value = "Vyšlo: "+vysledek;
//Pokud je div, span, nebo cokoli dalsiho:
element.innerHTML = "Vyšlo: "+vysledek;

To počítání ceny jsem nějak nepochopil, ale s tím co jsem ti zde popsal bys to měl zvládnout sám...
koudelacek
Profil *
Děkuju, pokusím se.
koudelacek
Profil *
Prosímtě, napsal jsem si

nejaka funkce {
var first = document.form.first_place.value;

document.form.vysledek.value = (first);
}

a v html mám formulář, kde je input first_place a v něm on key press a tahle funkce a dole je dalsi input s nazvem vysledek.. celkove to funguje, ale do toho pole vysledek se vzdy vypisuje az jak kdyby opozdene... zmacku 1 - nic, zmacku 2 - v poli vysledek to vypise 1, zmacku 3 - v poli vysledek to vypise 2.. proste je to "opozdene o jedno zmacknuti", muzes mi s tim poradit ?
peta
Profil
onkeypress = onkeydown + onkeyup
Tak pouzij onkeydown, ne?
Tori
Profil
koudelacek:
do toho pole vysledek se vzdy vypisuje az jak kdyby opozdene
Odlišné pořadí událostí v různých prohlížečích (v souladu se specifikací), MSIE při stisku klávesy vyvolá jen keydown, a keypress až buď při další změně, nebo po opuštění prvku. Totéž se týká události change, je jistější místo ní odchytávat click. Blur se zase někdy nespouští vůbec (např. checkboxy v Chrome 17).
koudelacek
Profil *
Děkuju za rady, nakonec jsem to rozjel až s onkeyup, onkeydown dělalo stejný problém. Ale mám ještě jeden a to když potřebuju sečist nějaké data, čtu už půl hodiny jak sčítat a pořád mi to nedělá co potřebuju.

Zkoušel jsem mnoho možností, ale vždy mi to místo sečtení napsalo proměnné za sebe. Poraďte prosím.

Potřebuju sečíst ( first+second+third ) * platba / 100.

<script>
function vypis(){


if(document.form.pay[0].checked)
{ var platba = "10";}
else { var platba = "14";}

var first = document.form.first_place.value;
var second = document.form.second_place.value;
var third = document.form.third_place.value;

if(document.form.top.checked)
  { platba++;platba++;}
if(document.form.time.checked)
  { platba++;}

document.form.vysledek.value = platba;
}

</script>



Nakonec se mi podařilo něco sestavit, ale někde jsem četl, že funkce eval se nemá používat .. tady se ptám, je to korektní ?

function vypis(){


if(document.form.pay[0].checked)
{platba = "10";}
else {platba = "14";}

var first = document.form.first_place.value;
var second = document.form.second_place.value;
var third = document.form.third_place.value;

if (document.form.first_place.value!="") var first = eval(first);
if (document.form.second_place.value!="") var second = eval(second);
if (document.form.third_place.value!="") var third = eval(third);

if(document.form.top.checked)
  { platba++;platba++;}
if(document.form.time.checked)
  { platba++;}
  
platba = eval(platba);

document.form.vysledek.value = (first+second+third)*platba/100;
}
Tori
Profil
Máme např. funkci parseInt, eval je fuj. :)
edit: Anebo přetypovat na číslo, nevím co je lepší var first = document.form.first_place.value * 1;
peta
Profil
Jj, to, co scitas, jsou stringy (ulozene ve value).
'123' + '456' = '123456'
123 + 456 = 579

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: