[DHTML] Controleren op wijzigingen in een editable iframe

Pagina: 1
Acties:

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
Ik ben bezig met het maken van een richtext edit control (oid) waarbij het de bedoelingen is dat de inhoud alleen kan worden opgeslagen als er ook werkelijk wijzigingen zijn aangebracht. Dit vanwege het feit dat de gehele control in een popup window geladen wordt en deze alleen kan worden gesloten als de inhoud is opgeslagen of als de gebruiker expliciet op OK drukt na een warning.

Nu van ik in de onkeydown event handler af of er op een bepaalde toest op het toestenbord is gedrukt die een wijziging zou veroorzaken. Dit werkt verder goed, de save optie wordt alleen actief als er op een van deze keys gedrukt wordt.

Nu heb ik echter een probleem met het resizen van images en tabellen. Ik zou wel graag willen afvangen als zoiets gebeurd maar ik zou eigenlijk niet weten hoe. Ik kan wel alle tabellen en images opzoeken in de inhoud van de iframe en daarvan steeds een event oid plaatsen, maar ik weet niet eens zeker of dat wel werkt en ik vind het allesbehalve een mooie oplossing. Mischien dat iemand hier wel een truukje of oplossing voor heeft?

Noushka's Magnificent Dream | Unity


  • André
  • Registratie: Maart 2002
  • Laatst online: 18-05 16:30

André

Analytics dude

Als je de code van de control ergens onzichtbaar in een textarea plaatst kun je vergelijken of de maten van images of tabellen veranderd zijn. Je checked elke 100ms gewoon of beide code's nog gelijk zijn, zo niet dan is er dus ge-edit.

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
Dat is ook wel een idee ja. Ik ga het wel even uitproberen. Thanks. :)

Noushka's Magnificent Dream | Unity


Verwijderd

Je kunt ook gewoon de code vergelijken, een stuk makkelijker en een stuk sneller :) Dus gewoon de inhoud in een buffer variabele opslaan en deze dan vergelijken met de huidige content in het frame.

  • André
  • Registratie: Maart 2002
  • Laatst online: 18-05 16:30

André

Analytics dude

Verwijderd schreef op 11 juli 2004 @ 21:49:
Je kunt ook gewoon de code vergelijken, een stuk makkelijker en een stuk sneller :) Dus gewoon de inhoud in een buffer variabele opslaan en deze dan vergelijken met de huidige content in het frame.
Is dat niet precies hetzelfde als wat ik zeg :P

Verwijderd

Okey, dankzij mijn ervaring op het gebied van webeditors maken, weet ik dat elke 100ms seconden checken grote overhead veroorzaakt, die onnodig is. Je moet gewoon het onresizestart event koppelen aan alle tabellen. IE Only!

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
  <head>
    <title></title>
    <script type="text/javascript">

window.onload = function (e) {
  var o = document.getElementById("frame");
  var d = o.contentWindow.document;
  d.designMode = "On";
  d.write("<table id='blaat' border='1'>");
  d.write("<tr><td>blaat</td><td>blaat</td></tr>");
  d.write("</table>");
  d.close();
  var oTable = d.getElementById("blaat");
  oTable.onresizestart = function (e) {
    // Dit schakelt resizen uit. Je kan nu dus
    // eenvoudig nagaan of een tabel ge-resized
    // wordt... 
    return false;
  }
}
    </script>
  </head>
  <body>
    <iframe id="frame">
    </iframe>
  </body>
</html>

[ Voor 85% gewijzigd door Verwijderd op 12-07-2004 00:05 ]


  • André
  • Registratie: Maart 2002
  • Laatst online: 18-05 16:30

André

Analytics dude

Ik kan het niet nalaten om te zeggen: maar waarom mag hij alleen opgeslagen worden als er wijzigingen zijn gemaakt? Waarom niet gewoon weer opslaan, dat scheelt je een heleboel code.

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
Dat omdat de control in een popup window geladen wordt. Het gaat in eerste instantie niet direct om het opslaan, het gaat meer om de warning die de gebruiker krijgt als hij/zij het venster probeert te sluiten als er wijzigingen zijn gemaakt. En het leek me dan ook logisch om de save button uit te schakelen als er niets op te slaan is en het venster dus zonder gevolgen te sluiten is.

Noushka's Magnificent Dream | Unity


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-05 18:53

Bosmonster

*zucht*

De data even in een variabele opslaan zoals eerder gezegd?

Je hoeft niet perse iedere 0.1 seconde te checken.. volgens mij ben je al een heel eind als je bijvoorbeeld alleen onkeydown en onpaste events afvangt.

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
Verwijderd schreef op 12 juli 2004 @ 00:04:
Okey, dankzij mijn ervaring op het gebied van webeditors maken, weet ik dat elke 100ms seconden checken grote overhead veroorzaakt, die onnodig is. Je moet gewoon het onresizestart event koppelen aan alle tabellen. IE Only!
[...]
Perfect! Alweer bedankt hé. Ook mooi dat het event automatisch wordt verwijderd als je de inhoud uitleest.

Noushka's Magnificent Dream | Unity


  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
Bosmonster schreef op 12 juli 2004 @ 13:58:
De data even in een variabele opslaan zoals eerder gezegd?

Je hoeft niet perse iedere 0.1 seconde te checken.. volgens mij ben je al een heel eind als je bijvoorbeeld alleen onkeydown en onpaste events afvangt.
Zo ver ben ik al wel nu.

Noushka's Magnificent Dream | Unity

Pagina: 1