我有一些在文本框上实现上下文菜单的代码,上下文菜单是有一个Undo
和Redo
项目,它通过使用来调用浏览器本机方法document.execCommand('undo')
。
此代码在基于 Chromium 的浏览器上运行,但在 FireFox 和 Opera 上,结果不如预期。
我的期望是撤消和重做将像输入元素的本机浏览器上下文菜单一样起作用。结果是输入元素不会撤消和重做,但是具有contenteditable
属性集的 div 元素会按预期运行。
所以我想知道这是否是其中一个浏览器中的错误,无论是 Chromium 还是 FireFox/Opera,还是我没有正确实现代码?
以下代码给出了我面临的问题的示例。感谢所有帮助。
<input contenteditable id="input" type="text"></input>
<div contenteditable id="div" class="inputLike" type="text"></div>
<button id="button1" type="button">Undo</button>
<button id="button2" type="button">Redo</button>
var input = document.getElementById("input"),
button1 = document.getElementById("button1"),
button2 = document.getElementById("button2"),
div = document.getElementById("div");
console.log("Undo", document.queryCommandSupported("undo"));
console.log("Redo", document.queryCommandSupported("redo"));
function doUndo() {
document.execCommand('undo', false, null);
}
function doRedo() {
document.execCommand('redo', false, null);
}
button1.addEventListener("click", doUndo, false);
button2.addEventListener("click", doRedo, false);
如果您想查看实际的上下文菜单代码,那么它也可以在jsfiddle上找到。