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