Autor Zpráva
Richo
Profil
Zdravím. Jsem úplný začátečník v javascriptu. Mám formulář:




<html><head><script language="JavaScript" type="text/javascript">
<!--
function Recount(theform) {
var cena1 = 0;
theform.cena1.value = parseInt(theform.delka.value) * theform.cena.value;

var cena2 = 0;
theform.cena2.value = parseInt(theform.cena1.value) + parseInt(theform.doprava['post'].value);


theform.celkem.value = theform.cena2.value * theform.ks.value;
}

//-->
</script>
</head>
<body>
<form>
<input type="hidden" name="cena" value="1.050">
<input type="hidden" name="cena2">
<table align="center" class="table" border="1" bordercolor="#778899" cellpadding="6px" rules="groups">
<col /><colgroup span="1" style="border-color: #778899;">
<thead>
<tr class="trb"><td>Rozměr otvoru (v milimetrech)</td><td>cena</td></tr>
<tr><td><input type="text" name="delka" size="5" onBlur="Recount(this.form)"/> mm</td><td><input type="text" name="cena1" size="5"/>,- Kč</td></tr></thead>
<tr><td class="tabtextl">Balné, poštovné (200,- Kč)</td><td><input type="radio" name="doprava" id="post" value="200" onBlur="Recount(this.form)" checked/></td></tr>
<tr><td class="tabtextl">Montáž (včetně dopravy, 700,- Kč)</td><td><input type="radio" name="doprava" id="montaz" value="700" onBlur="Recount(this.form)"/></td></tr>
<tr><td>Počet kusů</td><td><input type="text" name="ks" size="2" onBlur="Recount(this.form)"/></td></tr>

<tfoot>
<tr><td><b class="cena">Cena celkem</b></td><td><input type="text" name="celkem" size="4" onBlur="Recount(this.form)">,-Kč</td></tr>
</tfoot>
</table></form></body></html>


Zadám délku, vyberu jestli chci poštovné nebo montáž, zadám počet kusů a mělo by to vypočíst celkovou cenu "celkem". Kromě výpočtu ceny "cena1", který mi poradili na Intervalu to mám určitě blbě. Chtěl jsem se s tím poprat sám, ale nějak to nejde. Vaše případné rady mi budou poučením. Předem moc dík.
peta
Profil
kpsatweb - javascript - priklady
0.
co ti hlasi JS konzola za chybu?
FF - Nastroje - chybova konzola
O - Nastroje - javascript - konzola
IE - dole vlevo je bud modre "e" nebo zluty vykricnik /!, tak si jej rozklikni
1.
zkontroluj si typeOf(cislo) jestli je skutecne integer/float nebo string.
scitani stringu probiha: '4' + '1.1' = '41.1'.
alert('4'+'1.1')
alert('4'*1+'1.1'*1)
alert(parseInt('4')+parseFloat('1.1'))
viz treba javascript-reference webka, tam je to pekne popsano
2.
zkontroluj si, jake hodnoty ti vstupuji do scitani, nasobeni?
3.
nekomplikuj si zivot dlouhymi nazvy. Promenna muze mit jednopismenny nazev a treba takovy formular jako "f" je dost jasne :) Samozrejme cena a pod, tam bych dlouhe nazvy nechal.

function Recount(f) {
f.cena1.value = f.delka.value*1 * f.cena.value*1;
f.cena2.value = f.cena1.value*1 + f.doprava.value*1;
f.celkem.value = f.cena2.value*1 * f.ks.value*1;
}

"var cena1 = 0;" smysl tohoto radku mi neni jasny.
"f.doprava['post'].value" to je nejaky nesmysl, pole mas nazvane
<input type="radio" name="doprava"
nikoliv
<input type="radio" name="doprava['post']"
na to ti musi alert vypsat undefined, ne?

function Recount(f) {
alert(f.doprava['post'])
}

http://www.volny.cz/peter.mlich/www.htm#msub8
http://www.volny.cz/peter.mlich/www.htm#mssub11
Kalkulacka (13k) !!!nedokonceno
google.com calculator javascript
google.com math javascript
sakalik
Profil
toto je blby zapis theform.doprava['post'].value ak chces pristupit k elementu s id skus
document.getElementById("post").value
Richo
Profil
Tak jsem zjistil, že takhle už mi to spočítá celkovou cenu cenu s poštovným:


function Recount(f) {



f.cena1.value = parseInt(f.delka.value) * f.cena.value;

f.cena2.value = parseInt(f.cena1.value) + parseInt(f.doprava['post'].value);

f.celkem.value = f.cena2.value * f.ks.value;

}


Konzole mi žádnou chybu nehlásí, název jsem upravil, přístup k elementu s "ID" by měl být správný. je to někde tady... na "jak psat web"

Takže mě teď trápí právě výběr jednoho z těch radiobutonů
peta
Profil
" přístup k elementu s "ID" by měl být správný. je to někde tady... "
Tady je spousta veci, co funguji jen v IE. Si to vyzkousej i v tech ostatnich prohlizecich.

Kazdopadne vyber z radio je pres checked, tam myslim value nebere. Ale pres JS by se to mozna dalo pouzit. Jenom si treba overit nejdriv checked a pak vytahnout hodnotu value z toho sameho inputu.
jakpsatweb - javascript - priklady - formulare
Anonymní
Profil *
Tak už to počítá. Nakonec jsem našel řešení v učebnici Javascriptu (nevím teď kdo to napsal, já jsem si ji stáhnul...)


<script language="JavaScript" type="text/javascript">

<!--
function Recount(f) {
var cena2 = "";
var i;

f.cena1.value = parseInt(f.delka.value) * f.cena.value;

for (i = 0; i < document.forms[0].doprava.length; i++)
if (document.forms[0].doprava[i].checked)
cena2 = document.forms[0].doprava[i].value + " ";

f.cena3.value = parseInt(f.cena1.value) + parseInt(cena2);

f.celkem.value = f.cena3.value * f.ks.value;
}



<form>

<input type="hidden" name="cena" value="1.050">

<input type="hidden" name="cena3">

<table align="center" class="table" border="1" bordercolor="#778899" cellpadding="6px" rules="groups">

<col /><colgroup span="1" style="border-color: #778899;">

<thead>

<tr class="trb"><td>Rozměr otvoru (v milimetrech)</td><td>cena</td></tr>

<tr><td><input type="text" name="delka" size="5" onBlur="Recount(this.form)"/> mm</td><td><input type="text" name="cena1" size="5"/>,- Kč</td></tr></thead>

<tr><td class="tabtextl">Balné, poštovné (200,- Kč)</td><td><input type="radio" name="doprava" value="200" onBlur="Recount(this.form)" checked="checked"/></td></tr>

<tr><td class="tabtextl">Montáž (včetně dopravy, 700,- Kč)</td><td><input type="radio" name="doprava" id="montaz" value="700" onBlur="Recount(this.form)"/></td></tr>

<tr><td>Počet kusů</td><td><input type="text" name="ks" size="2" onBlur="Recount(this.form)"/></td></tr>



<tfoot>

<tr><td><b class="cena">Cena celkem</b></td><td><input type="text" name="celkem" size="4" onBlur="Recount(this.form)">,-Kč</td></tr>

</tfoot>

</table></form>


Tak teď toto pošlu nějakým PHP scriptem na mail.
Je mi jasné jak pošlu vybranou cenu radiobutonu. Nevíte někdo jak uvést v proměnné PHP scriptu zatržení buď poštovného, nebo montáže?
Richo
Profil
tak už bych to celkem měl. Mám ve funkci Recount výběr hodnoty jednoho z radiobutonu:

for (i = 0; i < document.forms[0].doprava.length; i++)
if (document.forms[0].doprava[i].checked)
cena2 = document.forms[0].doprava[i].value + " ";

Ta se převede do skrytého inputu name="cena2"

V obslužném PHP souboru mám proměnnou $doprava=($_POST['cena2']);

Ale, když tam mám: echo $doprava; tak mi to tu hodnotu nevypíše.

nevíte čím to je?
Richo
Profil
Tak už to skoro mám. "cena2" byla špatně nasměrovaná. Jinak to šlape. Všem díky za snahu.
Toto téma je uzamčeno. Odpověď nelze zaslat.