alternatief voor window.onbeforeunload

Pagina: 1
Acties:

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
in een ander topic kreeg ik hier een discussie over, maar omdat ik me een beetje bezwaard voel die in dat topic te houden open ik maar een nieuwe.

dit:
marty in "Netscape est mort. Vive Mozilla!"
is mijn eerste post daar, de reacties staan er onder.

Crips kwam opzich met een hele inventieve oplossing:
Er zijn wel omslachtige methoden denkbaar, zoals onunload toch het form submitten (target _blank ofzo), maar naar een ander script dat de data opslaat in een cookie of persistent session zodat je die data alsnog bij het terugkeren kan presenteren met een rood flashing message 'This previous data was not saved!'
Mijn probleem hiermee is alleen:
Het gaat vooral om formulieren waarbij data aangepast wordt. Ze zijn dus al gevuld met data uit de database. Daarom zou ik niet weten hoe ik daar 1 standaard oplossing voor kan schrijven. Op het moment dat ik zo'n formulier genereer en vul met waardes wordt er namelijk ook nog eens het 1 en ander omgezet (geboortedatums in leeftijd bijvoorbeeld) en op sommige plekken wordt ter plekke nog eens informatie uit andere tabellen gehaald. Als ik dit als oplossing zou willen gebruiken komt het er op neer dat ik voor heel veel pagina's apart nog eens allemaal aanpassingen en uitzonderingen moet gaan schrijven. Daar wordt ten eerste m'n code een zootje van en ten tweede gaat dat onwijs veel tijd kosten (het zijn zeker iets van 200 pagina's die dan moeten worden aangepast)

Als iemand er nog ideeën over heeft dan hoor ik dat graag :)

Verwijderd

Verwijderd schreef op 25 July 2003 @ 23:55:
code:
1
2
3
4
5
6
7
function welofniet(b){
u=confirm('wel of niet');
if (u==true){
document.forms[0].target='_blank';
document.forms[0].submit();
}}
window.onunload=welofniet;

Dit maakt het toch niet te zwaar? Ik weet eigenlijk niet precies wat je met te zwaar maken bedoelt.

(slim bedacht trouwens crisp)
Dit had ik toen daar geschreven, maar dit is niet iets wat jij kunt gebruiken?
Afgaande op je vraag zou ik denken dat dit een oplossing zou zijn, maar misschien mis ik iets?

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Verwijderd schreef op 30 July 2003 @ 23:58:
[...]


Dit had ik toen daar geschreven, maar dit is niet iets wat jij kunt gebruiken?
Afgaande op je vraag zou ik denken dat dit een oplossing zou zijn, maar misschien mis ik iets?
Ik ben geen javascript held, maar als ik het goed heb gaat dit script bij iedere window.unload vragen of je het wel zeker weet dat je de pagina wil verlaten? Dat is zeker niet de bedoeling, daar wordt je natuurlijk gestoord van. Maar ook als ie het alleen op de relevante moment zou doen (want dat krijg ik wel aangepast), dan nog is het geen oplossing want die window.unload is niet waterdicht. Een popupje kun je bijvoorbeeld gewoon afsluiten zonder dat ie tussenbeide komt. En dat moet ook worden afgevangen.

Wat ik in eerste instantie bedoelde met te zwaar is dat ik niet bij het verlaten van een pagina telkens in een target=_blank het formulier kon gaan saven. Later bedacht ik me pas dat dat natuurlijk niet bij iedere handeling nodig is. Maar, wat die oplossing betreft - over het opslaan in een nieuwe window waaruit je dan de gegegevens weer kan halen, dat gaat in mijn geval ook niet werken -> zie eerste post. En daarbij komt dus dat het bruut sluiten van een window ook niet afgevangen kan worden.

Verwijderd

Je hebt gelijk. Het afsluiten van een window wordt toch niet afgevangen op deze manier. Ik dacht dat de form-window geopend zou blijven, maar die wordt toch direct ook weer gesloten door de popup-blocker. Wacht eens, die was ik vergeten.
Het werkt dus wel als de popup-blocker is uitgeschakeld.

Alle andere bezwaren/problemen die je hebt, die zijn volgens mijn wel op te lossen.
Je kunt een check inbouwen of de gebruiker uberhaupt wel iets veranderd heeft in het formulier.
Een popupje kun je bijvoorbeeld gewoon afsluiten zonder dat ie tussenbeide komt. En dat moet ook worden afgevangen.
Dit is een confirm en die kun je wel afsluiten, maar het punt was toch dat de gebruiker er op attent wordt gemaakt dat die eventueel nog belangrijke data moet opslaan? Dat wordt die dan bij de confirm-vraag.

Maar goed, ik denk dat ik je nog niet overtuigd heb en ik denk dat jij denkt dat ik nog niet goed het hele probleem wat heel goed zou kunnen want dat beginik ook te denken.

Als je een soort voorbeeld zou kunnen aanhalen, dan zou dat een stuk helpen (denk ik)

Misschien heeft iemand anders nog een briljante oplossing voor dit probleem? :)

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Verwijderd schreef op 01 August 2003 @ 01:52:
Je hebt gelijk. Het afsluiten van een window wordt toch niet afgevangen op deze manier. Ik dacht dat de form-window geopend zou blijven, maar die wordt toch direct ook weer gesloten door de popup-blocker. Wacht eens, die was ik vergeten.
Het werkt dus wel als de popup-blocker is uitgeschakeld.
Dit kan ik even niet volgen. Wat bedoel je precies met een form-window?
Alle andere bezwaren/problemen die je hebt, die zijn volgens mijn wel op te lossen.
Je kunt een check inbouwen of de gebruiker uberhaupt wel iets veranderd heeft in het formulier.
Klopt. En die heb ik dan ook al een keer gemaakt :)
Dit is een confirm en die kun je wel afsluiten, maar het punt was toch dat de gebruiker er op attent wordt gemaakt dat die eventueel nog belangrijke data moet opslaan? Dat wordt die dan bij de confirm-vraag.
Ah, ik snap denk ik wat je bedoelt. ... de window wordt wel afgesloten, maar je saved de data in een andere window terwijl je dat doet en je brengt de gebruiker ervan op de hoogte.
Dat zou een mogelijkheid zijn maar zoals ik al eerder schreef:
marty schreef op 30 July 2003 @ 16:44:Het gaat vooral om formulieren waarbij data aangepast wordt. Ze zijn dus al gevuld met data uit de database. Daarom zou ik niet weten hoe ik daar 1 standaard oplossing voor kan schrijven. Op het moment dat ik zo'n formulier genereer en vul met waardes wordt er namelijk ook nog eens het 1 en ander omgezet (geboortedatums in leeftijd bijvoorbeeld) en op sommige plekken wordt ter plekke nog eens informatie uit andere tabellen gehaald. Als ik dit als oplossing zou willen gebruiken komt het er op neer dat ik voor heel veel pagina's apart nog eens allemaal aanpassingen en uitzonderingen moet gaan schrijven. Daar wordt ten eerste m'n code een zootje van en ten tweede gaat dat onwijs veel tijd kosten (het zijn zeker iets van 200 pagina's die dan moeten worden aangepast)
Maar goed, ik denk dat ik je nog niet overtuigd heb en ik denk dat jij denkt dat ik nog niet goed het hele probleem wat heel goed zou kunnen want dat beginik ook te denken.

Als je een soort voorbeeld zou kunnen aanhalen, dan zou dat een stuk helpen (denk ik)
Ik heb bijvoorbeeld een pagina waar persoonsgegevens staan en waar iemand arbeidsverleden ook staat. Omdat dat arbeidsverleden meerdere rows in een tabel zijn en de rest maar 1 row in de 'hoofd' tabel, haal ik dus in eerste instantie alleen de gegevens uit de 'hoofd'-tabel. Als ik dan bij het gedeelte over het arbeidsverleden kom ga ik met het unieke id z'n arbeidsverleden uit de relevante tabel halen en genereer ondertussen de invoervelden waar die data in komt te staan. Als ik de oplossing van crisp zou nemen dan moet ik hier dus een een uitzondering voor gaan schrijven, die eerst controleert of we daar zijn aanbeland om oude data te herstellen. Als dat zo is moet ie ipv de database aanspreken dan een array in m'n sessie gaan aanspreken. Etc. Zonder al te veel in detail te gaan treden over het hoe en wat: dat brengt allemaal extra complicaties met zich mee waardoor ik een hele lap extra code moet gaan invoeren. Andere problemen gaan zich voordoen op het vlak van GET en POST variabelen. Als ik op een pagina kom omdat ik een formulier heb gesubmit met bepaalde waarden, dan moet dat ook allemaal gesimuleerd gaan worden. Dan moet ik die waarden dus ook in m'n sessie gaan op slaan op het moment dat iemand per ongeluk de pagina verlaat. En vervolgens, als ze besluiten terug te gaan, moet ik die waardes vanuit m'n sessie dus weer in m'n POST waarden gaan stoppen. Dat is echt vies programmeren! en zit ik ook niet echt om te springen.
Alles bij elkaar vind ik dat dus qua leesbaarheid en netheid van m'n code heel erg zonde, het wordt er trager op, het gaat heeeel veel tijd kosten om voor iedere pagina de juiste uitzonderingen te schrijven en wat ik in feite doe is heel veel extra rotzooi aan PHP code invoeren om 1 javascript functie te vervangen.
Nou, dat is het me nou ook weer niet waard. Als het echt niet anders kon...tja...maar het werkt nu wel al in IE en hoewel we erg graag over zouden gaan op mozilla..(en linux), ik vestig dan liever m'n hoop op een andere javascript oplossing, of op het feit dat mozilla misschien toch eindelijk een soort van window.unbeforeunload event inbouwt.