Autor Zpráva
zebra11
Profil
Potřebuju poradit jak udělám takovou jednoduchou kalkulačku jsem v javascriptu nováček tak potřebuju poradit....

Představuju si to takto:


"a" a "b" by byly pole do kterých by se dalo zapisovat, např.: do pole "a" bych napsal '1' a do pole "b" bych napsal '2' (to by se hosilo do proměných "a" a "b"); poté by se stisklo tlačítko odeslat, které by sečetlo proměně "a" a "b" a odeslalo to do políčka "c"....

Potřebuju vědět jak to udělat, všem předem děkuji za odpovědi...
Měsíček
Profil
Reaguji na zebra11:

Třeba takhle (jde to, ale ještě zkrátit a zlepšit):
<script type="text/javascript">
  function secti () {
    with (document.form) { c.value = parseInt(a.value)+parseInt(b.value); }
  }
</script>

<form name="form">
  <input name="a"> + <input name="b"> = <input name="c">
    <input type="button" onClick="secti();" value="Odeslat">
</form>
   
Měsíček
Profil
Reaguji ještě jednou na zebra11:

Kdyby jsi chtěl hodně šetřit místem, jde to i takhle:
<form name="form">
  <input name="a"> + <input name="b"> = <input name="c">
  <button onClick="with (document.form) { c.value = parseInt(a.value)+parseInt(b.value); }">
    Odeslat
  </button>
</form>
zebra11
Profil
Super dík... mohl by mi ještě někdo vysvětlit toto:
c.value = parseInt(a.value)+parseInt(b.value)
Měsíček
Profil
Reaguji na zebra11:

"Super dík... mohl by mi ještě někdo vysvětlit toto: "

Do "c.value" (rozloženě do "document.form.c.value") přiřaď součet "a.value" (rozloženě "document.form.a.value") a "b.value" (rozloženě "document.form.b.value). Funkce parseInt() oseká případný vstup písmene na číslo .. tedy kdyby jsi zadal omylem do jednoho pole místo "5" třeba "5d" tak to bude "d" převede na nic a bude zase počítat s "5" takže se vlastně nic nestane, jestliže by tam ta funkce nebyla tak by to fungovalo pouze kdyby jsi zadával čísla, kdyby jsi zadal omylem písmeno, celá aplikace by přestala fungovat.
zebra11
Profil
OK děkuji Měsíčku moc si mi pomohl...

Moderátoři můžete to LOCKnout..
Měsíček
Profil
Reaguji na zebra11:

"OK děkuji Měsíčku moc si mi pomohl... "

Za málo.

"Moderátoři můžete to LOCKnout.."

Pod tlačítkem "Poslat zprávu" máš odkaz "Zamknout téma" -> tím to LOCKneš :)
Chamurappi
Profil
Reaguji na zebru11:
Na funkci parseInt si dej pozor, umí pracovat i s různými číselnými soustavami. Zadáš-li „020“, parseInt předpokládá osmičkovou soustavu a vrátí 16. Zadáš-li „0x5d“, parseInt předpokládá šestnáctkovou soustavu a vrátí 93. Číselnou soustavu si lze vynutit druhým argumentem, takže kdyby byla zmíněná inteligence na obtíž, můžeš volat parseInt(řetězec, 10).

Zamknout si můžeš sám, pokud si myslíš, že hrozí příliv nežádoucích příspěvků — jinak to nemá žádný smysl a důrazně to nedoporučuji. Kdybych nebyl moderátor, mohl bych teď tenhle svůj rozepsaný text zahodit, protože jsi mi zamknul pod nosem. Což by mě fakt nepotěšilo. Odemykám.


Reaguji na Měsíčka:
with (document.form)
Není sice nic špatného na tom, že si formulář pojmenuje, ale v tomto případě to není nezbytné. Formulářové prvky mají v this.form uloženou referenci na svůj rodičovský formulář.

máš odkaz "Zamknout téma" -> tím to LOCKneš :)
Děsná psina.
ultrapako
Profil
:-)
zebra11
Profil
Číselnou soustavu si lze vynutit druhým argumentem, takže kdyby byla zmíněná inteligence na obtíž, můžeš volat parseInt(řetězec, 10)
Co mám dát na místo "řetězec"? Je to a.value?
Měsíček
Profil
Reaguji na zebra11 (alias ultrapaka):

"Co mám dát na místo "řetězec"? Je to a.value?"

Na místo "řetězec" máš dát "řetězec" - čiliže v tomto případě klidně i "a.value".



Mohl bych poprosit moderátory jestli by se podívali zdali se shoduje IP adresa uživatele ultrapako a zebra11?
Chamurappi
Profil
Reaguji na zebru11:
Za řetězec si dosaď jakoukoliv proměnnou (klidně a.value) nebo přímo řetězec v uvozovkách. Viz Proměnné v jazyce JavaScript.

Reaguji na Měsíčka:
Reaguji na zebra11 (alias ultrapaka)
IP se neshoduje. Ani úroveň projevu se moc neshoduje, zebra11 je původní tazatel a ultrapako je jen vůl vytahující zbytečně zapadlá vlákna.
suvel
Profil
Oživuji tohle vlákno, protože při řešení problému, kdy potřebuji zkontrolovat, jestli do formuláře bylo zadáno číslo (a ne jakékoli náhodné znaky), jsem tady přišel na podobné řešení.
ALE: parseInt() mi nefunguje, vždy hodí jenom hodnotu NaN, nikdy žádné číslo, ať dělám, co dělám, a to i ve výše zveřejněném kódu od Měsíčka (kalkulačka vyhodí jako výsledek sčítání NaN). Kde je chyba?
vynalezce
Profil
suvel
if(isNaN(pole)){alert('musite zadat cislo')}
snad je to ok
suvel
Profil
Dík, ale Měsíček napsal:
Funkce parseInt() oseká případný vstup písmene na číslo .. tedy kdyby jsi zadal omylem do jednoho pole místo "5" třeba "5d" tak to bude "d" převede na nic a bude zase počítat s "5"
To je přesně to, co potřebuju. Ale ta funkce to nedělá!
Anebo jak to zařídit jinak?
vynalezce
Profil
pokud jsi napsal vlastni funkci nebo jsi tu funkci opsal hod sem kod
vynalezce
Profil
hadam ze NaN to hazi jen kdyz zadas znakyCISLOznaky
vynalezce
Profil
a co takhle
if(isNaN(parseInt(pole,10))){alert('musite zadat cislo')}
suvel
Profil
No ono to funguje i v té kalkulačce, co je tady nahoř. Když se zadá text, je výsledek NaN. Já bych uvítal, kdyby byl v takovém případě výsledek 0. V jiných jazycích je to legrace, tam existuje převod řetězce na číslo, který tohle dělá, v php je to taky legrace, ale jak na to v JS, to fakt nevím. Prosím, poraďte někdo..
vynalezce
Profil
if(isNaN(parseInt(pole.value,10))){pole.value=0}
snad to funguje
Chamurappi
Profil
Reaguji na suvela:
Když se zadá text, je výsledek NaN. Já bych uvítal, kdyby byl v takovém případě výsledek 0.
var výsledek = parseInt(řetězec, 10) || 0;
suvel
Profil
Dík, je to řešení (JS moc neznám, tak jsem čekal nějakou integrovanou funkci) :-)

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:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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