29. november 2001 - 09:44Der er
7 kommentarer og 1 løsning
Undersøge om brugeren har ændret på indhold af DIV !?!
Jeg har en lidt tricky problemstilling vedr. et CMS system, jeg er i gang med at bygge:
Jeg har en DIV hvor contenteditable er slået til, således at brugeren kan ændre på indholdet af denne DIV.
Jeg har samtidig følgende event-handler i BODY:
onbeforeunload=\"if (saved!=\'yes\'){return \'Har du husket at gemme eventuelle ændringer ?\'}\"
Dvs. at medmindre variablen \"saved\" er sat til \"yes\" fremkommer en advarsel inden brugeren forlader siden. Dette medfører desværre at advarslen også kommen selv om brugeren IKKE har ændret på indholdet. Det er jo ikke så genialt.
Derfor har jeg brug for et script der kan detecte ændringer i indholdet af min DIV - hvis der foretages ændringer skal variablen \"saved\" sættes til \"no\"
<ole> Desværre har MS ikke implementeret en event, der håndterer dette scenarium. \'onpropertychange\' udelukker desværre også ændringer i et div\'s innerText eller innerHTML :( Læg indholdet ind i en variabel, når du loader div\'et og sammenlign så med det aktuelle indhold, når brugeren forlader siden.
Jeg har dog et lille problem med dit løsningsforslag. Indholdet til min DIV er jo en masse tekst, billeder & HTML koder. Indholdet her indeholder jo en masse \"´er. Når jeg hælder dette indhold over i en javascript-variabel bliver den gal på mig over at der er \" i indholdet !?!?
<html> <head> <script type=\"text/JavaScript\"> function onStart() { var startContent = document.getElementById(\"myDiv\").innerHTML; } function onEnd() { var endContent = document.getElementById(\"myDiv\").innerHTML; } </script> </head>
<body onload=\"onStart()\" onBeforeUnload=\"onEnd();if(startContent!=endContent){return \'Du har foretaget ændringer\'}else{return \'Du har ikke foretaget ændringer\'}\">
Du skal definere dine variabler globalt - og så skal du endelig huske at slette dine \'var\' inde i funktionerne:
<html> <head> <script type=\"text/JavaScript\"> var startContent, endContent; function onStart() { startContent = document.getElementById(\"myDiv\").innerHTML; } function onEnd() { endContent = document.getElementById(\"myDiv\").innerHTML; } </script> </head>
<body onload=\"onStart()\" onBeforeUnload=\"onEnd();if(startContent!=endContent){return \'Du har foretaget ændringer\'}else{return \'Du har ikke foretaget ændringer\'}\">
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.