Autor | Zpráva | ||
---|---|---|---|
Alice Profil * |
#1 · Zasláno: 22. 9. 2006, 13:18:34
Ahoj, potřebuju načíst do proměnné v JS hodnotu ze vstupního pole. Jak to mám udělat?
Na Jakpsatweb.cz to tam je načteno příkazem prompt(), ale to nechci... Dík |
||
Joker Profil |
#2 · Zasláno: 22. 9. 2006, 16:07:03
Z textového políčka? Například pokud je to políčko:
<input type="text" id="policko" name="policko"> tak třeba takhle: if(document.getElementById && document.getElementById("policko")) hodnota = document.getElementById("policko").value else hodnota = undefined; |
||
peta Profil * |
#3 · Zasláno: 22. 9. 2006, 16:25:01
Alice
jakpsatweb - javascript - priklady - formulare Vsechny hry mam na hodnotach zalozene. Pocitani skore. http://www.volny.cz/peter.mlich/hry/hry.htm |
||
Alice Profil * |
#4 · Zasláno: 22. 9. 2006, 17:59:44
tak nevím...nějak mi to nejde.Mám tedy políčko.
<input type="text" id="policko" name="policko"> a potřebuju dostat jeho hodnotu (value?) to co do něj napíšu do proměnné y, která je ve scriptu (teť je tam ta 13ka)... <script> |
||
Alice Profil * |
#5 · Zasláno: 24. 9. 2006, 19:45:39
Možná to tu už vysvětlené je, ale fakt to nevidím....nechápu
|
||
Joker Profil |
#6 · Zasláno: 24. 9. 2006, 22:45:55
Alice
Vadí Vám něco na tom skriptu co jsem psal ve své odpovědi? Podle mě dělá přesně to co chcete. Vysvětlení: Když si v objektovém modelu dokumentu najdete objekt příslušného políčka, jeho vlastnost "value" obsahuje tu hodnotu kterou chcete. Políčko formuláře si najdete přes jeho ID pomocí metody document.getElementById(). Výsledek: hodnota = document.getElementById("policko").value; Je to jednoduché, problém ale je, že některé prohlížeče (třeba staré IE) neznají document.getElementById() a vyhodí chybu. Takže musím zajistit, aby se to neprovedlo v prohlížečích, které tu metodu neznají. A pro jistotu ještě vyřeším i stav, kdy by prohlížeč nenašel to políčko. Rozlišení je relativně jednoduché: u prohlížečů, které umí document.getElementById(), bude existovat atribut document.getElementById typu function. Takže prostě otestuju, jestli ten atribut existuje. A pak otestuju, jestli najde to dané políčko. Pokud ano, přiřadím hodnotu a pokračuju, v opačném případě můžu skončit anebo se ještě pokusit získat hodnotu políčka jinak, třeba přes document.all Výsledný skript: if(document.getElementById && document.getElementById("policko")) hodnota = document.getElementById("policko").value else hodnota = undefined; Pak by ještě bylo dobré zkontrolovat, jestli jsme nějakou hodnotu dostali: if(!hodnota) alert("Někde je chyba"); Tak. Doufám, že teď už je to dostatečně okecané ;) |
||
peta Profil * |
#7 · Zasláno: 25. 9. 2006, 16:22:58
Alice
jakpsatweb - javascript - priklady - formulare <form name="aaa"> <input type="text" name="policko"> </form> <script> var f,y, text; y = 13; y = y * 2 * 7 * 11; text = "Hezké číslo je " + y; f = window.document.aaa.policko; f.value = text; alert(text); </script> nebo misto radku: <input type="text" name="policko"> -> <input type="text" id="policko"> a function objGet(x) {var d=document;if(typeof x=='string') x=d.getElementById?d.getElementById(x):d.all?d.all[x]:d.layers?d.layer s[x]:null; return x;} a misto f = window.document.aaa.policko; -> f = objGet("policko"); //+definice funkce objGet(x) pro objekty pro ruzne prohlizece |
||
Alice Profil * |
#8 · Zasláno: 25. 9. 2006, 19:48:48
Dík za všechny rady. Podařilo se mi to, že v textovém políčku se mi zobrazilo číslo spočtené scriptem. To jsem alespoň pochopila.. Můj celý záměr byl ale hlavně takový, abych do něj zapsala já nějaké číslo a script by mi z tohodle čísla vypočítal číslo jiné...Prostě jak to v ukázkovém scriptu počítá. Dosadím 13ku a tu to vynásobý2,7 a 11 že výsledek je 2002. :)
|
||
Joker Profil |
#9 · Zasláno: 25. 9. 2006, 19:56:53
Alice
No a kde je problém? Prostě to obrátíte, místo hodnotu do políčka budete kopírovat políčko do hodnoty |
||
Alice Profil * |
#10 · Zasláno: 25. 9. 2006, 21:32:29
:) Tak,už to bude...Hlavní funguje, ale jak mám udělat to, abych tu hodnotu v policku policko mohla přepisovat? Když tam teť hodnotu value="13" nezadám tak se mi tam objeví prázdné textové pole, do kterého sice zapisovat hodnoty můžu, ale už mi jí to nepřebere ten script... Próč, a jak to dodělat?
<form name="aaa"> |
||
Joker Profil |
#11 · Zasláno: 26. 9. 2006, 15:37:02
Alice
Ach tááák! Už vím, kde je problém: Javascript se provádí jen jednou, ve chvíli kdy se načítá stránka. Když to políčko pak přepíšete, skriptu už je to jedno, už skončil. Vy ale chcete skript provést znovu v závislosti na akci uživatele. Od toho je v Javascriptu věc zvaná události. Objektový model dokumentu poskytuje různé události a každé události na každém prvku můžete přiřadit skript, který se při té události provede. Vás tedy teď bude zajímat chvíle, kdy na tom políčku "policko" nastane událost "změna hodnoty", která se jmenuje onchange. Takže z toho vašeho skriptu udělejte funkci, například vypocet():
a potom řeknete políčku, že při události změna hodnoty se má provést funkce vypocet: <input type="text" name="policko" value="13" onchange="vypocet"> Výpočet můžete navázat třeba i na kliknutí na tlačítko: <button onclick="vypocet">Vypočítat</button> Anebo přes odkaz: <a href="javascript:vypocet()">Vypočítat</a> Pro jistotu dejte skript před políčka, aby se náhodou nestalo to, že načítání stránky se nějak zasekne a vy změníte políčko dřív než se stáhne skript (což by způsobilo chybu) A ještě pokud máte v políčku výchozí hodnotu, skript se neprovede hned na začátku (s výchozí hodnotou), ale provede se až teprve když uživatel udělá tu příslušnou akci, na kterou je navázaný. Jestli chcete skript provést už na začátku, můžete skript pověsit třeba na událost onload toho formuláře anebo za formulářem tu funkci zavolat "ručně": <form...> ... </form> <script type="text/javascript> vypocet(); </script> |
||
Joker Profil |
#12 · Zasláno: 26. 9. 2006, 15:53:50 · Upravil/a: Joker
Alice
Ještě pár doporučení k tomu skriptu: Pokud budete psát delší skripty s více proměnnými, pojmenovávejte je nějakým smysluplným jménem, jinak se v tom za chvíli utopíte. Před "document.getElementById("policko").value" by bylo dobré si ověřit, jestli prohlížeč umí document.getElementById() Vůbec nejlíp když si na načítání prvku napíšete vlastní funkci, tu pak můžete používat ve všech skriptech. Příklad: function nacti(jmeno){ // pro prohlížeče znalé document.getElementById to zkusíme použít if(document.getElementById) return(document.getElementById("jmeno")); // v IE 4-5 funguje document.all if(document.all) return(document.all[jmeno]); // případné další varianty by patřily sem // když neuspějeme, vrátíme false: return(false); } Funkce vypocet() by pak vypadala takhle (dovolím si přejmenovat proměnné): function vypocet(){ var vstup, hodnota, vystup, text; vstup = nacti("policko"); vstup = nacti("policko1"); // pokud načtení některého políčka neuspělo, skončíme if(!vstup || !vystup) return(false); hodnota = vstup.value; hodnota = hodnota * 2 * 7 * 11; text = "Hezké číslo je " + hodnota; vystup.value = text; } |
||
Alice Profil * |
#13 · Zasláno: 26. 9. 2006, 18:16:52
Joker
Děkuji za objasnění problému. |
||
Alice Profil * |
#14 · Zasláno: 26. 9. 2006, 18:34:05
jj, tak nevim, asi jsem to urychlia...nefunguje mi to. Jak tam vložim do toho scriptu tu funkci vypocen, tak to vůbec neukazuje hodnoty v policku1.
<form name="aaa"> |
||
peta Profil * |
#15 · Zasláno: 26. 9. 2006, 20:26:15
1. <button onclick="vypocet()">Vypočítat</button>
2. y = document.getElementById("policko").value; tj konstrukce <input type="text" id="policko"> f = window.document.aaa.policko1; tj konstrukce <input type="text" name="policko1"> Coz mas uz zase spravne 3. Nastroje - konzola javascriptu, tam to pise chyby, to musis videt. Ja pouzivam toto: f = window.document.aaa.policko1; f.value = text; Ale trosku jinak jsem to napsal... f jako form f = window.document.aaa; f.policko1.value = text; f.policko.value = ""; atd, proste objekty z toho formulare... Ale to jen jako poznamku... |
||
peta Profil * |
#16 · Zasláno: 26. 9. 2006, 20:29:21
Joker
return(document.getElementById("jmeno")) asi preklep :) "jmeno" jako string asi nebude fungovat |
||
Časová prodleva: 18 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0