【问题标题】:Javascript: Exporting browser's native undo/redo stacks for a textareaJavascript:为文本区域导出浏览器的本机撤消/重做堆栈
【发布时间】:2014-08-07 03:12:57
【问题描述】:

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

我还想使用 javascript 调用本机撤消/重做堆栈,这很容易通过以下方式完成:

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

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

总之我有两个问题:

  1. 导出本机浏览器的撤消堆栈
  2. 调用本机浏览器的撤消方法。

我目前正在使用 Mozilla Firefox(最新版本)。我很乐意尝试任何可用的浏览器(Safari 除外)。

【问题讨论】:

  • execCommandcontentEditable 元素相关,而不是 textarea 元素。您需要使用textarea吗?或者您可以改用contentEditable div 吗?
  • 我需要能够重播编程代码的输入。由于所有选项卡和间距问题,我担心使用 contentEditable div。现在研究 contentEditable div(没有经验)。
  • html5demos.com/contenteditable 似乎可以很好地处理间距。

标签: javascript html firefox browser undo


【解决方案1】:

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这个游戏...)

【讨论】:

  • 谢谢 T.J.我已经进行了更改,现在错误已删除!不错的收获。您对第二个问题有任何了解吗 -> 如何导出/保存浏览器的撤消/重做堆栈?
  • @cgn:我不知道。不过,我怀疑你不能。我认为这方面没有任何标准。
猜你喜欢
  • 1970-01-01
  • 2023-03-10
  • 2018-07-19
  • 2021-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-28
  • 2017-03-16
相关资源
最近更新 更多