4
在Chrome中,我注意到在元素內容以編程方式更改後,撤消對輸入元素無效。雖然我針對不同的瀏覽器獲得了不同的行爲,但它們並沒有Chrome那麼糟糕。Chrome內容在內容更改後無法正常工作
FF20 good
IE9 some support (undo stack cleared when input loses focus)
Safari5 some support (undo stack cleared when input loses focus)
Chrome26 unreliable
例如,修剪腳本空間(見的jsfiddle下文)
- 類型之前, 「你好!」 一些空間,
- 點擊輸入元素
- 點擊外輸入元素,然後按Ctrl-Z
現在文字消失了(在Chome)
<input type="text" id="input1" value="hello!">
document.getElementById("input1").addEventListener('blur', function(evt){elementLosesFocus(evt, this);}, false);
function elementLosesFocus(evt, caller)
{
caller.value = caller.value.trim();
}
我想我能期待的最好的事情就是以某種方式清除輸入的撤銷歷史,當它失去焦點(如與IE和Safari的情況)的方法。
這是黃金。謝謝!有大量的庫處理插入符,選擇和替換它們,但所有這些庫最終都使用'input.value'或'textarea.text',這導致OP描述的撤銷問題。 – flu 2015-04-29 15:36:51
只需注意它不會在Firefox中工作。如果'document.execCommand'返回false,則需要直接回退到設置值(而不是通過粘貼文本)。查看Firefox中的錯誤:https://bugzilla.mozilla.org/show_bug.cgi?id = 1220696 – Nux 2017-10-09 11:39:11