Včera jsem tu řešil, jak vyzvat uživatele k uložení dat, pokud opustí formulář jiným způsobem, než kliknutím odeslat (prostě odejdou na jinou stránku), nakonec jsem s vaší pomocí stvořil tenhle skritp:
<script language="JavaScript">
odeslano = false;
function kontrola()
{
if (odeslano) {
return false;
}
prom = confirm("Data nebyla uložena, chcete je uložit?");
if (prom) {
formular.submit();
return false;
}
else {
return true;
}
}
</script>
No a v BODY pak mám onUnload="kontrola();". Jenže teď ten dialog vyskakuje při odchodu jinam vyskakuje nezávisle na tom, jestli se obsah formuláře změnil nebo ne, což dost otravuje, pokud se chci na data jen podívat a nechci je měnit. Šlo by nějak otestovat, jestli se obsah formuláře změnil, a volat pak dialogové okno pouze v případě, že se opravdu změnil? Předem všem děkuji :)
http://www.eggheadcafe.com/articles/20010406.asp
A nějaké jednodušší řešení by nebylo? Jsem rád, když skritpu, který použiju, rozumím, ale tohle je na mne moc složité...
Podľa mňa je to najjednoduchšie riešenie, je dobre popísané, takže sa dá jednoducho prispôsobiť.
Najdôležitejšia funkcia je isDirty: tá prebehne všetky prvky, ktorých hodnoty sú odosielané na server. Porovnáva ich hodnoty s pôvodnými (defaultValue). Aby vo formulári na začiatku boli skutočne pôvodné hodnoty, tak treba na onload spraviť form.reset ().
Alebo pomôže niečo na tento spôsob:
dať tým prvkom onchange="isDirty=true" a vytvoriť globálnu premennú isDirty=false.
No vyřešil jsem to vlastně nakonec úplně jednoduše (předtím mi nějak nedošlo, že existuje událost onChange) - prostě při načtení stránky nastavím zmeneno = false; a u každého prvku formuláře mám onChange = "zmeneno=true;" no a pak před vyskočením okna jen otestuju, jak vypadá zmeneno...
Abych nezapomněl: Děkuju...