Ik ben bezig met het maken van een component voor het bewerken van HTML tekst. Nu heb ik een check ingebouwd die een waarschuwing geeft als het window gesloten wordt zonder te saven. Dit doe ik door een tekst te returnen aan het onbeforeunload event. En dat alleen als er een vlag is gezet (zeg boolean variable changed). Nu ben ik ook bezig met een custom context menu waarin acties uit te voeren zijn (zoals bold, italic, copy etc.) via tekst links in plaats van icons zoals in de toolbar boven het iframe waarin de tekst bewerkt wordt.
Het probleem is dat als er op een linkje geklikt wordt in het context menu, dat dan event onbeforeunload getriggerd wordt. Als de vlag al gezet is krijg je dus een waarschuwing die je eigenlijk alleen hoort te krijgen als het venster gesloten wordt. Dit is echter alleen het geval als het linkje ook werkelijk een href attribuut bezit. De linkjes zijn allen zo gevormd:
Nu zul je denken, nou zo opgelost, halen we het href attribuut weg. Dat gaat dus ook niet werken omdat dan, heel vreemd, de actie verkeerd uitgevoerd wordt omdat de iframe dan de focus verliest. De iframe verliest dus geen focus als er op een linkje met href wordt geklikt of een img. (ik zou ook niet weten waarom dat is).
Ik gebruik verder twee functies voor het zetten van de vlag. Dat zijn flag() en unflag(). Nu dat ik het op te kunnen lossen door voor de actie unflag() aan te roepen: onclick="unflag();actie();" en dan de flag() weer zetten aan het einde van de actie. Dat wilde ook niet werken omdat het event pas na alle events van de link zelf wordt getriggerd.
Hoe ik het nu heb opgelost is door gebruik te maken van de setTimeout functie en zo de flag pas te zetten nadat het onbeforeunload event is getriggerd. Werkt wel maar is niet echt een mooie oplossing. Mischien iemand die wel eens voor de zelfde situatie heeft gestaan en het beter heeft opgelost?
Het probleem is dat als er op een linkje geklikt wordt in het context menu, dat dan event onbeforeunload getriggerd wordt. Als de vlag al gezet is krijg je dus een waarschuwing die je eigenlijk alleen hoort te krijgen als het venster gesloten wordt. Dit is echter alleen het geval als het linkje ook werkelijk een href attribuut bezit. De linkjes zijn allen zo gevormd:
code:
1
| <a href="javascript://" onclick="actie();">actie tekst</a> |
Nu zul je denken, nou zo opgelost, halen we het href attribuut weg. Dat gaat dus ook niet werken omdat dan, heel vreemd, de actie verkeerd uitgevoerd wordt omdat de iframe dan de focus verliest. De iframe verliest dus geen focus als er op een linkje met href wordt geklikt of een img. (ik zou ook niet weten waarom dat is).
Ik gebruik verder twee functies voor het zetten van de vlag. Dat zijn flag() en unflag(). Nu dat ik het op te kunnen lossen door voor de actie unflag() aan te roepen: onclick="unflag();actie();" en dan de flag() weer zetten aan het einde van de actie. Dat wilde ook niet werken omdat het event pas na alle events van de link zelf wordt getriggerd.
Hoe ik het nu heb opgelost is door gebruik te maken van de setTimeout functie en zo de flag pas te zetten nadat het onbeforeunload event is getriggerd. Werkt wel maar is niet echt een mooie oplossing. Mischien iemand die wel eens voor de zelfde situatie heeft gestaan en het beter heeft opgelost?