Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[javascript] Undo *

Pagina: 1
Acties:

Verwijderd

Topicstarter
hoi,

Ik wil de inhoud van een textarea vergelijken met de wijzigingen aangebracht door de client erna. Dit om geen popup (undo changes?) te tonen als er niet gewijzigd is.
Hieronder noteer ik op sterk vereenvoudigde wijze wat het probleem is:

PHP:
1
2
3
<textarea rows="10" cols="60" id="newsEditMessage"> <? $database_inhoud ?> </textarea>

<a onclick="showAdUndo( <? $database_inhoud ?> );return false;"><img src="../img/undo.png" title="Undo Changes"></a>"


JavaScript:
1
2
3
4
5
6
function showAdUndo(dbTextArea)
{
     alert(dbTextArea);
     var dbValueArea = document.getElementById("newsEditMessage").value;
     alert(dbValueArea);
}


Nu: dat lukt. Maar als die text ($database_inhoud) nu 'newlines' bevat, werkt heel die javascript functie niet meer en krijg ik geen enkele alert te zien.

Ik hoop dat het wat duidelijk geformuleerd is.
Alvast bedankt voor jullie tijd!
Danny

Edit: ik ben die titel vergeten in te vullen en weet niet hoe ik die opnieuw kan wijzigen. In Edit niet, blijkbaar, of ik zie er naast.

[ Voor 8% gewijzigd door Verwijderd op 07-05-2008 23:53 . Reden: layout ]


  • Johnny
  • Registratie: December 2001
  • Laatst online: 11:54

Johnny

ondergewaardeerde internetguru

Waarschijnlijk is het genoeg om de newline charachters te escapen voor JavaScript in PHP. Maar zonder een link of de HTML-code zoals die wordt gegenereerd kunnen we lastig zien waar het probleem zit.
PHP:
1
str_replace("\n", "\\n", $database_inhoud);

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


  • Mafkees
  • Registratie: Oktober 2003
  • Niet online
Je kunt de textarea ook vullen met de database inhoud, en vervolgens een form reset button toevoegen om de wijzigingen terug te draaien. Zoiets dus:

code:
1
2
3
4
<form..>
<textarea....><?=$database_inhoud?></textarea>
<input type="reset" value="Undo" />
</form>

Verwijderd

Topicstarter
Johnny:
-string replace helpt voorlopig niet.
-wil je de volledige code zien? Die is nogal gecompliceerd denk ik.

Mafkees:
-was vergeten te zeggen dat ik met ajax bezig ben. Aan die showAdUndo() hangt eigenlijk nog een hele functie om de boel te resetten. Maar dat werkt allemaal.

[ Voor 23% gewijzigd door Verwijderd op 08-05-2008 00:03 . Reden: extra info ]


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

Ik denk dat het de moeite loont om die (potentieel) enorme string niet in een javascript-functie-in-een-javascript-url mee te sturen. Ten eerste omdat je nu al gezever hebt met escaping en je geheid gezeik krijg met het driedubbel-escapen-syndroom (een keer voor javascript, een keer voor de url, een keer voor de html).

Mijn oplossing zou zijn om de textarea gewoon te vullen zoals je dat gewend bent, en dan in de window.onload de waarde van de textarea direct ergens opslaan, zodat dat je "initiele" waarde is. De undo-knop doet dan niets anders dan de .value property van de textarea instellen met die "initiele" waarde.

Mockupje dan maar...
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
//Helemaal onderaan in je body (in een script tag wel, duh)
(function() {
  var initialValue;  
  window.onload = function() {
    initialValue = document.getElementById("dbinhoud").value;
  };
  document.getElementById("undoButton").onclick = function() {
    document.getElementById("dbinhoud").value = initialValue;
    return false;
  };
})();


Iets in die richting. Die rare functie-header is om te voorkomen dat je een global definieert ;)

日本!🎌


Verwijderd

Topicstarter
da's idd een eenvoudigere mogenlijkheid om de te undo-en dan ik reeds gedaan had. (mijn undo-knop werkt wel degelijk) Maar mijn probleem ligt elders denk ik. Misschien verlies ik mij teveel in details. Als je nu de undo-knop drukt, verschijnt er een pop-in met vraag om bevestiging. (undo changes? yes-no) Ik wou er voor zorgen dat wanneer er géén veranderingen waren, de knop gewoon niet zou werken en dus geen onnodige pop-in zou tonen. Maar misschien is dit idd prutswerk en overbodig..

bedankt voor de reacties alvast!

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

Je mag mijn scriptje aanpassen hoor, daar is het een mockup voor :)

Gewoon een kwestie van checkken of de value van de textarea ongelijk is aan initialValue. Dan ben je er.

[ Voor 9% gewijzigd door _Thanatos_ op 08-05-2008 20:36 ]

日本!🎌


  • Tanuki
  • Registratie: Januari 2005
  • Niet online
Ik zou gewoon quotes om die string-parameter in de functie aanroep zetten.
En daarnaast niet echo $message; doen, maar echo jsaddslashes($message);

Die functie kun je vast wel ergens Googlen.

PV: Growatt MOD5000TL3-XH + 5720wp, WPB: Atlantic Explorer v4 270LC, L/L: MHI SCM 125ZM-S + SRK 50ZS-W + 2x SRK 25ZS-W + SRK 20ZS-W Modbus kWh meter nodig?


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

Dus als er 50KB in die textarea staat, is het normaal om 100KB naar de client te duwen? Een dergelijke "ik zou gewoon" reactie met daarin een dergelijk houwtje-touwtje oplossing krijg ik echt jeuk van. Het is nu misschien maar 400 karakters, en het is nu misschien maar 1 textarea, maar dat wordt vanzelf wel anders. En de functionaliteit hergebruiken kun je ook vergeten, want je kunt geen 50KB string uit een database in een js-file gaan plakken. Dat kan alleen als je een methode gebruikt die lijkt op mijn mockup, want die kan wel in een externe js-file.

日本!🎌

Pagina: 1