在Chrome中撤消不输入元件正常工作后,内容改变编程(In Chrome undo does no

2019-09-01 01:52发布

在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

现在文本消失(在丁目)

这里的jsfiddle

<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的情况)的方法。

Answer 1:

Chrome浏览器不会存储领域的国家,而是一个差异或增量设置为每个撤销/重做。 它需要较少的内存,但是会导致你处理的bug。

可以有效地模拟用户使用粘贴值到现场document.execCommand("insertText", false, "text to insert");

为了您的具体情况:

  1. 首先,该字段的值保存到一个变量。 var temp = caller.value;
  2. 接着,清除该字段的值或它的selectionStart设置为0和选定结束至该字段的长度。 这种方式模拟贴替换字段的内容。
  3. 接下来,确保该领域具有焦点。 caller.focus();
  4. 最后,模拟的修正值的用户粘贴。 document.execCommand("insertText", false, temp.trim());

我发现了另一个问题,SO该解决方案, https://stackoverflow.com/a/10345596/1021426



文章来源: In Chrome undo does not work properly for input element after contents changed programmatically