6

我有一种迷你应用程序,除其他外,它可以手动修改输入文本区域。简单地设置值(并可选择恢复光标/滚动位置)有一个很大的缺点:它打乱了编辑历史。所以我使用这个函数进行所有修改:

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

对于我的项目来说,糟糕的支持是可以的,并且该功能非常适合插入文本和替换它(选择要替换的文本,然后调用type)。但是当它被一个空字符串调用时,它什么都不做。

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

那么有没有人知道一种解决方法,或者其他方式来修改 textarea 的值而不会弄乱编辑历史?

4

1 回答 1

1

不要传入空字符串,而是传入\0. 这似乎在这里工作。或者你可以像这样检测一个空字符串:

function type(el, str) {
    var e = document.createEvent('TextEvent');
    e.initTextEvent('textInput', true, true, null, str || "\0");
    el.dispatchEvent(e);
}
于 2013-01-01T21:05:27.063 回答