Autor Zpráva
Jiri Casek
Profil
Poprosím pár odpovědí

<form name=form5 >
<textarea id="text5">login</textarea>
<input type="submit" value="ok" onSubmit="document..getgetElementById('text5').innerHTML = 'password'">
</form>


toto by dle mě mělo fungovat následovně:
onSubmit je událost která se provede když kliknu na tlačítko ok.
document.getElementById('text5').innerHTML='password'
Vlož slovo password mezi tagy, které mají ID text5
Proč to nefunguje?
Proč ve zdějších příkladech často používáte funkci? Ta je podle návodu pouze na to, chcu-li nějakou činnost opakovat. Ale když chcu jen jednorázovou událost, tak stačí takovýto zápis, ne?


našel jsem si příklad

onclick="insertTag('cosi')"

function insertTag(text) {
   document.getElementById('textareaId').value = 
   document.getElementById('textareaId').value + text;
}


Zde zřejmě ještě chybí nějak definovat, že text je proměnná, která se přečte z textarea. správně?
bylo by to:?
var text = "name textarey"

Pro adresování na textareu se používá value, i když se value zapisuje mezy tagy?

Jsem si vědom rozdílů, že v prvním případě chcu do textarey vepsat slovo password, bez ohledu na to, co tam uživatel zadá a v druhém už prcuji se zadanými údaji a proto musím použít proměnou.

Ale opět. Není zbytečně volat funkci?
Nestačilo by definovat proměnou? a:?

onSubmit="document.getElementById('textareaId').value + text;
uestla
Profil
Jiri Casek
Obsah tagu <textarea> nese vlastnost .value, nikoli .innerHTML. Pro kliknutí se používá událost onclick, nikoli onsubmit (ta se používá pro element <form>).
V úvodním skriptu máš ještě další chybky (dvakrát tečku, dvakrát get).

Toto by mělo fungovat:
<input type="submit" value="ok" onclick="document.getElementById('text5').value = 'password';">



// EDIT: V rychlosti jsem přehlédl, že událost vážeš na odesilací tlačítko (submit), čili když se na něj klikne, formulář se odešle - což asi nepotřeuješ. Pokud chceš, aby se pouze napsalo slovo password do textarey, změň type inputu na "button".
Jiri Casek
Profil
funguje, ale password tam jen problikne a pak se tam vrátí login

Zkusel jsem teda i

  <form name=form5  onSubmit="document.getElementById('text5').value='password';">
<textarea id="text5">login</textarea>
<input type="submit" value="ok">
</form>


A děje se to samý. Slovo password jen problikne.Proč se login nepřepíše?
habendorf
Profil
Protože form odešleš, takže se stránka načte znovu.
keeehi
Profil
Uprav to třeba takto:
<form name=form5  onSubmit="document.getElementById('text5').value='password'; return false;">
Jiri Casek
Profil
to znamená: Chcu-li takové chování, tak nesmím odesílat formulář, ale musím provést pouze událost, která změní obsah <textarey>?

A nebo mohu odeslat formulář, ale s tím, že se nové údaje musí musí uložit. V tomhle případě se musí stránka načíst se slovem password, které mohu někam nějak zadat.?
Jiri Casek
Profil
return false = znova nenačítej???
keeehi
Profil
Jiri Casek:
skoro, v tomto případě to potlačuje to odesílání. Když bys to použil třeba takto
<a href="nekam.htm" onclick="return false;">Klikni si</a>

tak bude ten odkaz neklikatelný, protože return říká že po něm je návratová hodnota a false je nepravda, takže ten javascript vlastně řekne, bylo kliknuto? ne. Proto bude odkaz nefunkční.
Jiri Casek
Profil
Takže ta návratová hodnota v podstatě znamená - provede-li se jakákoli událost, či jakákoli činnost, kterou javascript zpracuje, tak její výsledek je ona návratová hodnota - čili return.
Takže to nechápu
onSubmit je událost při odeslání formuláře.
Takže já mu řeknu- "když odešlu formulář vlož do value slovo passwort" a vzápětí mu řeknu
odeslání je nepravda, takže formulář neodesílej. Tím pádem mi není jasné proč to funguje, protože mu řeknu, co má udělat při odeslání a vzápětí to odelsání zruším. Takže bych měl teoreticky zrušit i to getElementById.
_es
Profil
Jiri Casek:
onSubmit je událost při odeslání formuláře.

Presnejšie, je vyvolaná pred odoslaním formulára.
Do vlastnosti onSubmit je priradená funkcia, buď v kóde JS alebo v HTML, kde je z toho reťazca vytvorená.
Tá funkcia môže robiť rôzne veci a pred svojim ukončením môže ešte odoslanie zrušiť.
Takže dokiaľ tá funkcia neskončí je odoslanie pozastavené.
keeehi
Profil
Jiri Casek:
return je klíčové slovo jtajně jako třeba if nebo else. To říká, že to co je za ním je návratová hodnota (v tomto případě je to false, ale klidně tam může být true, nebo i nějaká proměnná).

takže to vypadá nakonec takto:
klikneš na tlačítko odeslat
javascript zjistí, že chceš odeslat formulář, proto vykoná příkazy co jsou v onsubmit
hned prvním příkazem se nahradí text v textarea a už je nahrazený
poté je tam příkaz, aby javascript vrátil false, což tedy udělá
kdyby tam se to false nevrátilo, po tomto kroku by se formulář odeslal což způsobí jeho znovunačtení, čímž zmizne password a je tam původní hodnota. Ale protože se z onsubmit vrátilo false, formulř se neodešle, proto se znovu nenačte a zůstane tam změněná hodnota javascriptem
Jiri Casek
Profil
Bezva děkuju. Už to myslím chápu.
To je příklad, kdy dosazuji předem dané slovo. Ještě poprosím vyjasnit proměnou.
Javascrip na těchto stránkách studuji už asi měsím, ale chybí mi tam propojení mezi jednotlivými díly. (pokud zrovna nechci požít uvedený příklad.)

Jak se dostane do proměné obsah textarey (nebo nějaké tagu)?
Pužívá se stejný způsob adresování jako při událostech? tzn.

var promena = "document.form5.text5.value"

nebo
var promena = "name textarey"


Kdy se provede to načtení value do proměné? Když dám:?

<form onSubmit="document.getElementByID('text5').value=(promena); return false;">


tak si sám najde (kdekoli na strance) deklaraci proměné a dosadí si to?
Nebo se musí volat funkce ve které je proměná deklarována?

(ps. vím že teď je to blbost, protože tam chci dosadit něco, co tam uživatel vepsal a už to tam je. Jde mi o pochopení principu)
uestla
Profil
Myslím, že navrhovaná řešení jsou příliš krkolomná a chci upozornit na svůj příspěvek [#2].
Jestli dobře rozumím problému Jiriho Caska, jde mu jen o to, aby se po kliknutí na tlačítko vyplnila <textarea> daným obsahem. V tom případě mi přijde hezčí i logičtější použít následujícího kódu (shodný s již zmíněným příspěvkem výše, až na typ inputu)

<input type="button" value="ok" onclick="document.getElementById('text5').value = 'password';">


Hezčí je to proto, že to dělá to, co Jiri Casek chce (alespoň si to myslím), a nemusí se řešit žádné odeslání či neodeslání formuláře.
Jiri Casek
Profil
onclick na inputu fungoval stejně. Jenom to prokliklo.
uestla
Profil
Jiri Casek
Přečti si, prosím, EDIT u příspěvku [#2] a závorku u příspevku [#13]. Děkuji.
keeehi
Profil
do proměnné takto:
var promena = document.form5.text5.value;


ten onsubmit je špatně
když to napíšeš takto:
onSubmit="document.getElementByID('text5').value=mojefunkce();return false;"


tak si to vyhledá funkci mojefunkce a tu funkci "provade/spustí"

ta funkce může vypadat třeba takto:
function mojefunkce(){
var promena = "nejaký text";

return promena;
}


tato funkce uloží do proměnné text nějaký text a následně obsah této proměnné vrátí tomu co ji volalo.

takže JAKOBY pak onsubmit vypadal takto !! je to jen pro ilustraci !!
onSubmit="document.getElementByID('text5').value="nejaký text";return false;"
_es
Profil
Jiri Casek:
Javascrip na těchto stránkách studuji už asi měsím, ale chybí mi tam propojení mezi jednotlivými díly.
Zrejme myslíš diskusiu, radšej prečítaj JavaScript na JPW v takom poradí ako to tam je, alebo nejakú profesionálnejšiu knihu.
Jiri Casek
Profil
Diskusi nemyslím. Studuji právě to na co jsi mi dal odkaz. Dokonce jsem si to už i celé přepsal.

Takže chcu-li načíst údaje do nějaké proměné - musí to provést funkce.

Mám zde ještě jeden příklad, kdy jsem testoval <input type=text> a jeho možnosti (výsledek mého učení). Jako záklaní vysvětlení funkcí se uvádí, když chceme jednotnou operaci opakovat. Ukázka, že tohle jsem nezvládl, protože mám na každý input sólo funkci. Právě jsem nezvládl proměné a jejich dosazování.

<script type="text/javascript">
function prepis() { document.getElementById('textik').innerHTML=document.formular.text.value; }; 
function prepis1() { document.getElementById('textik1').innerHTML=document.form.text.value; };
function prepis2() { document.getElementById('textik2').innerHTML=document.form2.text.value; }; 
</script>

<fieldset>
<legend><strong>textové pole, které je už zaměřené </strong></legend>
<form name="form" action="#" onSubmit="prepis1(); return false;">

<p><label>vidíte kurzor? : <input type="text" name="text" id="focus"/></label></p>

</form>	
		
<p><strong>Zadali jste:</strong>   <span id="textik1"></span></p>
</fieldset>

<script type="text/javascript">
document.getElementById("focus").focus();

</script>




<fieldset>
<legend><strong>textové pole s předvyplněným textem</strong></legend>
<form name="formular" action="#" onSubmit="prepis(); return false;">

<p><label>Předvyplněný text po zaměření zmizí: <input type="text" name="text" value="sem zadejte text" onfocus="if(this.value=='sem zadejte text')this.value=''"/></label></p>

</form>	
		
<p><strong>Zadali jste:</strong>   <span id="textik"></span></p>
</fieldset>



<fieldset>
<legend><strong>opět předvyplněný text, ale tentokrát jej musíme vymazat</strong></legend>
<form name="form2" action="#" onSubmit="prepis2(); return false;">

<p><label>Předvyplněný text je potřeba vymazat: <input type="text" name="text" value="sem zadejte text"></label></p>

</form>	
		
<p><strong>Zadali jste:</strong>   <span id="textik2"></span></p>
</fieldset>


Stále jedna a ta samá činnost, ale mění se mi ID a input.
Jde to napsat na jednu funkci?
_es
Profil
Jiri Casek:
Aby udalosť onsubmit fungovala, tak vo vlastnotí onsubmit objektu form musí byť funkcia.
Ak sa zadá v HTML <form onsubmit="nejaké príkazy">, tak sa z tých príkazov vyrobí funkcia a potom sa priradí do tej vlastnosti.
A pri udalosti onsubmit bude tá funkcia vyvolaná.
Nejaká funkcia môže byť do tej vlastnosti priradená aj v kóde JavaScriptu.
Iná vec je, že tá funkcia môže volať iné funkcie, napríklad funkciu mojefunkce (príspevok keeehiho).

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: