Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何删除文本区域中的文本,使其进入本机编辑历史记录?_Javascript_Textarea - Fatal编程技术网

Javascript 如何删除文本区域中的文本,使其进入本机编辑历史记录?

Javascript 如何删除文本区域中的文本,使其进入本机编辑历史记录?,javascript,textarea,Javascript,Textarea,我有一种迷你应用程序,其中包括手动修改输入文本区域。简单地设置该值(以及选择性地恢复光标/滚动位置)有一个很大的缺点:它会扰乱编辑历史。因此,我将此函数用于所有修改: function type(el, str) { var e = document.createEvent('TextEvent'); e.initTextEvent('textInput', true, true, null, str); el.dispatchEvent(e); } 对我的项目来说,支

我有一种迷你应用程序,其中包括手动修改输入文本区域。简单地设置该值(以及选择性地恢复光标/滚动位置)有一个很大的缺点:它会扰乱编辑历史。因此,我将此函数用于所有修改:

function type(el, str) {
    var e = document.createEvent('TextEvent');
    e.initTextEvent('textInput', true, true, null, str);
    el.dispatchEvent(e);
}
对我的项目来说,支持不好是可以的,而且该函数在插入文本和替换文本时效果很好(选择要替换的文本,然后调用
type
)。但是当用空字符串调用它时,它什么也不做

对于某些删除,我可以通过选择要删除的文本和其他内容,重新键入额外的位,然后适当地移动光标来解决这个问题。但如果我们删除文本区域中的所有内容,这是不可能的


那么,有没有人知道一种变通方法,或者其他方法来修改textarea的值而不破坏编辑历史?

与其传入空字符串,不如传入
\0
。这似乎奏效了。或者,您也可以只检测一个空字符串,如下所示:

function type(el, str) {
    var e = document.createEvent('TextEvent');
    e.initTextEvent('textInput', true, true, null, str || "\0");
    el.dispatchEvent(e);
}

看起来,至少在某些浏览器中,空字符仍然存在,只是不可见。请看,“空”文本区域的长度是1。我想这总比没有好。它能达到这个目的吗?肯定比没有好,谢谢你的贡献。它确实有效,但如果不插入额外字符,我会对我的解决方案感觉更好。我想我已经找到了一些东西——我把它放在了一个单独的答案中。结果证明我错了,我的解决方案不起作用——尽管它不起作用是非常狡猾的。@st boost它以什么方式失败了?