テキストボックスにコンテキストメニューを実装するコードがいくつかあります。コンテキストメニューには、を使用してブラウザーのネイティブメソッドを呼び出すUndo
and項目があります。
このコードは Chromium ベースのブラウザーでは必要に応じて機能しますが、FireFox と Opera では期待どおりの結果が得られません。
元に戻すとやり直しは、入力要素のネイティブ ブラウザー コンテキスト メニューのように機能することを期待しています。その結果、入力要素は元に戻したりやり直したりしませんが、属性が設定された div 要素は期待どおりに機能します。
それで、これはブラウザーの 1 つ (Chromium または FireFox/Opera) のバグなのか、それともコードを正しく実装していないのか疑問に思っています。
次のコードは、私が直面している問題の例を示しています。すべての助けに感謝します。Redo
document.execCommand('undo')
contenteditable
<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について
実際のコンテキスト メニュー コードを見たい場合は、jsfiddleでも利用できます。