Autor Zpráva
Schmutzka
Profil
Zdravím, mám takový formulář, který pomocí save(); uložít info z flashe do db a pak sám doplní info. Je však nutné "chvilku počkat", než se formulář odešle, jinak se save(); nerealizuje. Zatím to dělám následovně:

<input type="submit" value="Uložit" onClick="save();confirm('Opravdu uložit záznam?')" name="pridat">


Potřebuji udělat něco jako:
onClick="save();wait(300ms);continue;"


Děkuji za rady.
_es
Profil
Schmutzka:
Je však nutné "chvilku počkat", než se formulář odešle, jinak se save(); nerealizuje.
Používaš nesprávne udalosti.
Treba použiť udalosť onsubmit formulára.
Chamurappi
Profil
Reaguji na Schmutzku:
wait(300ms);
Nic takového v JS není, stejně jako ve většině vyšších programovacích jazyků.
Budeš muset odeslání stornovat (pomocí return false při onsubmit), nastavit časovač a z něj vyvolat odeslání (metodou submit na formuláři).
_es
Profil
Chamurappi:
Budeš muset odeslání stornovat (pomocí return false při onsubmit), nastavit časovač a z něj vyvolat odeslání (metodou submit na formuláři).
Lepšie bude upraviť aplikáciu tak, aby niečo také robiť nemusel.
Napríklad sa dá formulár nasmerovať do iframe a pod.
Schmutzka
Profil
_es:
Treba použiť udalosť onsubmit formulára.

V tom případě se skript save(); nestihne realizovat. Pro přehled přikládám jeho znění, opakuji, že ukládá data z flashového kreslícího nástroje, takže se musí spustit ještě v době, kdy jsme na stránce (před odesláním, jinak pak nemá jaké údaje sbírat):

function save( str ){
 getID('drillbook-flash').save();
}

Napríklad sa dá formulár nasmerovať do iframe a pod.
To si nedokážu přestavit. Můžeš exemplárně přiblížit?

Chamurappi:
Budeš muset odeslání stornovat (pomocí return false při onsubmit), nastavit časovač a z něj vyvolat odeslání (metodou submit na formuláři).

Mohu poprosit o reálný příklad na mou situaci? Tedy nechat proběhnout save() a po 300ms form odeslat na xxx.php?
_es
Profil
Schmutzka:
To si nedokážu přestavit. Můžeš exemplárně přiblížit?
Formulár má atribút target, ten môže byť nastavený aj na iframe alebo frame na stránke, teda celá stránka, až na ten frame alebo iframe zostane po odoslaní formulára tak, ako je. V tom iframe môžu byť skripty, spolupracujúce so zvyškom stránky, možností, ako to využiť, je veľa.
Alebo len využi postup, ktorý navrhol Chamurappi, no to odoslanie formulára zabezpeč z Flasha, nie z časovača JS.

Mohu poprosit o reálný příklad na mou situaci?
Nie je v tom nič zložité. Element formulára má metódu submit, ktorá odošle formulár. A vlastnosť onsubmit, ktorá sa dá nastaviť na funkciu, ktorá bude vyvolaná pri odoslaní formulára užívateľom. Ak táto funkcia vráti false, odoslanie formulára nenastane. Pri zavolaní metódy submit nenastáva udalosť onsubmit.
Schmutzka
Profil
_es:
To prvé mi teda má získat potrebný čas na provedení save(); tím, že se to najskôr provede a poté se vyhodnotí obsah iframu?

Nie je v tom nič zložité. Element formulára má metódu submit, ktorá odošle formulár. A vlastnosť onsubmit, ktorá sa dá nastaviť na funkciu, ktorá bude vyvolaná pri odoslaní formulára užívateľom. Ak táto funkcia vráti false, odoslanie formulára nenastane. Pri zavolaní metódy submit nenastáva udalosť onsubmit.

Hej, ale potrebujem skor tu druhú část, kde sa urobí save(); a formulár se ozaj odešle.

Potrebujem ozaj reálný príklad (keď je to tak jednoduché), nie sa motat v takmer jasný základoch, tedy čo robí submit, onsubmit, false apod.
_es
Profil
Schmutzka:
To prvé mi teda má získat potrebný čas na provedení save(); tím, že se to najskôr provede a poté se vyhodnotí obsah iframu?
Áno, no bolo by treba aj trochu prerobiť funkčnosť aplikácie, lebo by sa po odoslaní formulára nenačítala nová stránka do celého okna.
Takéto odoslanie formulára neprerušuje Flash skripty na stránke, lebo tie stále zostávajú.

Potrebujem ozaj reálný príklad
formulár.onsubmit = function(){save(); return false; };
A skript Flasha si upravíš tak, aby odoslal formulár, keď bude všetko potrebné spravené. Teda nejako vo Flash skripte zavoláš formulár.submit().
Schmutzka
Profil
Aby to bylo naprosto jasné zadání:
prosím o názorný příklad s jednoduchým formulářem o jednom poli, které se po kliknutí na Odeslat odešle až za 3 s.
Chamurappi
Profil
Reaguji na Schmutzku:
Myslím, že jsme ti docela podrobně popsali, jak na to. Názorný příklad, který teď žádáš, by už bylo hotové řešení.
Prosím o konkrétní dotaz, co ti není jasné, nebo o názorný příklad chybného kódu.
_es
Profil
Schmutzka:
prosím o názorný příklad s jednoduchým formulářem o jednom poli, které se po kliknutí na Odeslat odešle až za 3 s.
To nie je dobrý nápad, ak niečo ukladáš v AS, tak z AS môžeš aj odoslať formulár, či nie?

ukládá data z flashového kreslícího nástroje
Môžeš predsa detegovať správne uloženie a potom formulár odoslať pomocou AS.
Schmutzka
Profil
Chamurappi:
názorný příklad chybného kódu.

Vidíš, to mne nenapadlo. Omlouvám se, ale myslím, že tu řešíme prkotinu na 10 řádků na 15 příspěvcích a mně se ani po 2 hodinách nepodařilo dojít na funkční schéma. (Opera 11, Win XP)

<script type="text/javascript">
function later() {
  return setTimeout('document.myForm.submit()',3000);
}
</script>

<form action="" method="POST" name="myForm">
  <input name="text">
  <input type="submit" onSubmit="return false;later();">
</form>



_es:
To nie je dobrý nápad, ak niečo ukladáš v AS, tak z AS môžeš aj odoslať formulár, či nie?
S AS vôbec nerobím, aj keď tam je (nie je to moja robota a neviem ho), potrebujem iba toto uložit za pomocí js/php.

Děkuji za rychlé reakce, už jsem to viděl beznadějně :).
Chamurappi
Profil
Reaguji na Schmutzku:
<input type="submit" onSubmit="…">
Stačilo by hodit do vyhledávače slovo onsubmit a v mžiku bys zjistil, že je to událost formuláře, nikoliv odesílacího tlačítka.

return false;later();
Nejprve běh funkce ukončíš a pak voláš later()… to nedává moc smysl, ne?

myslím, že tu řešíme prkotinu na 10 řádků na 15 příspěvcích
Optimální a pochopitelné rady jsi dostal už v těch prvních.

S AS vôbec nerobím, aj keď tam je (nie je to moja robota a neviem ho)
Nepotřebuješ ho nějak zvlášť umět, stačí vědět, jak nalistovat adresu, a nalistovat z té actionscriptové funkce save adresu javascript:document.myForm.submit();.
Schmutzka
Profil
Chamurappi:
„return false;later();“
Nejprve běh funkce ukončíš a pak voláš later()… to nedává moc smysl, ne?

Souvisí se zkoušením v prvním problému, kdy se mi to neustále odesílalo.
Děkuji za pomoc, pachtím se s tím (tím, co za tím stojí) už 2 týdny, tak mi to nemyslí tak positivně.

Z AS znám jen tu koncovku, nicméně předám kolegovi, snad mu nám to pomůže. Ještě jednou děkuji.
Schmutzka
Profil
ak odeslat i název submitu? Tímto stylem se mi přenáší pouze vyplněná pole.

Vyřešeno:
<input type="hidden" name="typ_pridani" value="0">
<input type="submit" name="ulozit" onclick="getElementById('typ_pridani').value=1">
<input type="submit" name="ulozit_jinak" onclick="getElementById('typ_pridani').value=2">


Pak se jen ověří hodnota "typ_pridani" a je to.

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: