Bonjour,
J'ai un textarea pour l'édition en bbcode.
Je voudrais ajouter une commande annuler et une commande rétablir. Mes recherches sont vaines. Je ne sais absolument pas comment démarrer. Pourriez-vous m'aider, si possible en JavaScript pur.
Bonjour,
J'ai un textarea pour l'édition en bbcode.
Je voudrais ajouter une commande annuler et une commande rétablir. Mes recherches sont vaines. Je ne sais absolument pas comment démarrer. Pourriez-vous m'aider, si possible en JavaScript pur.
Bonsoir à tous,
Une fonction Undo Redo: Javascript ES6 Undo Redo Function
J'ai essayé d'implémenter la méthode indiquée plus une autre (voir plus bas) et je ne m'en sors pas. Je DESESPERE COMPLETEMENT.
J'essaie d'adapter le script à mon cas et je ne m'en sors pas.
Contrairement à l'exemple, je n'ai qu'une zone de texte qui sert à la fois à la saisie et à l'affichage. Je n'ai pas de bouton add et je dois à la place détecter les changements dans la zone de texte.
J'ai essayé d'adapter le script mais je ne m'en sors pas.
J'ai en outre une autre difficulté qui est que je n'arrive pas à me familiariser avec l'écriture des fonctions fléchées et à l'affectation des fonctions à des variables mais ça c'est une autre histoire.
EDIT: J'ai trouvé un autre exemple plus simple qui fonctionne pour la fonction undo mais que je n'arrive pas à faire fonctionner pour la fonction redo. En effet, le dernier élément de commands n'est plus disponible comme le montre le console.log(commands); de la ligne 35. J'ai essayé de cloner commands avant la ligne 17 pour conserver l'état initial de commands mais j'accumule les erreurs. Par ailleurs la fonction undo ne fonctionne pas lorsque j'insère une balise bbcode. JE DESESPERE.
Voici mon code tel que je l'ai adapté:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 const textArea = document.getElementById("textArea"); const commands = []; const btnUndo = document.getElementById('btnUndo'); const btnRedo = document.getElementById('btnRedo'); function saveCommand(e) { commands.push({ // the action is also saved for implementing redo, which // is not implemented in this example. action: { type: 'add', key: e.key, index: textArea.selectionStart }, inverse: { type: 'remove', index: textArea.selectionStart } }) } function undo() { let value = textArea.value.split('') const lastCommand = commands.pop() if (!lastCommand) return switch (lastCommand.inverse.type) { case 'remove': value.splice(lastCommand.inverse.index, 1) break; } textArea.value = value.join('') } btnUndo.addEventListener('click', function(e){ undo(); }, false ); function redo() { console.log(commands); // ?? } btnRedo.addEventListener('click', function(e){ redo(); }, false ); textArea.addEventListener('keydown', function(e){ saveCommand(e); }, false );
Bonjour,
il existe quelque chose de très simple :
sinon il me semble plus judicieux d'observer l'événement beforeinput voire input sur la <textarea>.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 // annuler document.execCommand("undo"); // rétablir document.execCommand("redo");
Les joies du CSS | Réponses sur forum | Simple comme JS | Essais libres autour de l'API G$$gle Maps
✂ ---------------------------------------------
developpez.net c'est aussi :
✔ Les meilleurs cours et tutoriels pour apprendre le CSS
✔ Les meilleurs cours et tutoriels pour apprendre le (X)HTML
✔ Les meilleurs cours et tutoriels pour apprendre le JavaScript
Je lis dans la doc MDN ceci:Du coup, je ne sais pas quoi faire. Je galère vraiment.Obsolète: Cette fonctionnalité a été supprimée des standards du Web. Bien que quelques navigateurs puissent encore la supporter, elle est en cours d'éradication. Ne l'utilisez ni dans d'anciens projets, ni dans de nouveaux. Les pages et applications Web l'utilisant peuvent cesser de fonctionner à tout moment.
A défaut de quelque chose d'aussi simple, j'aimerais trouver un script complet existant qui gère aussi l'incorporation de balises bbcode complètes.
EDIT: J'ai quand même fait l'essai avec Edge et ça ne fonctionne pas avec l'insertion de balises bbcode par un bouton.
Bonjour,
Tu ne peux pas utiliser simplement la propriété value du textarea pour enregistrer et restaurer le contenu ?
Un petit exemple : https://jsfiddle.net/mxkeyLj1/
Partager