Javascript:为textarea导出浏览器的本机撤消/重做堆栈

时间:2014-06-17 07:35:19

标签: javascript html firefox browser undo

是否有任何方法可以为textarea导出/保存任何浏览器的本机撤消/重做堆栈?我希望能够撤消/重做所有在textarea中的输入,事后。

我还想使用javascript调用本机undo / redo堆栈,这可以通过以下方式轻松完成:

$('#textarea_im_using').focus();
document.execCommand('undo', false, null); 

但是,这导致控制台中出现NS_ERROR_FAILURE:Failure错误消息。有什么想法吗?

总之,我有两个问题:

  1. 导出本机浏览器的撤消堆栈
  2. 调用本机浏览器的撤消方法。
  3. 我目前正在使用Mozilla Firefox(最新版本)。我很乐意尝试任何有效的浏览器(Safari除外)。

1 个答案:

答案 0 :(得分:6)

execCommandaccording to MDN与文档设计模式或contentEditable元素相关,而不是像textarea这样的表单字段。

使用contentEditable div可能会让您执行您尝试完成的任务。当然,在支持它的浏览器上,它允许您以编程方式触发undo操作,并且我相信您对contentEditable div的控制比对textarea的控制更多。

Live Example

HTML:

<p>Edit me:</p>
<div id="editor"></div>
<button id="buttonUndo">Undo</button>

CSS:

#editor {
  border: 1px solid black;
  min-height: 2em;
}

JavaScript的:

var editor = document.getElementById("editor");
var buttonUndo = document.getElementById("buttonUndo");
editor.contentEditable = true;
buttonUndo.onclick = function() {
  document.execCommand("undo", false, null);
};

(在onclick使用,因为IE8支持这些内容,我不喜欢玩addEventListener / attachEvent游戏......)