【发布时间】:2015-01-17 14:52:36
【问题描述】:
有没有办法用 javascript 编辑 input 或 textarea 的内容,并使用浏览器的“撤消”命令(例如 ctrl-Z)撤消该更改?
我正在尝试在选择的值中插入一个字符串,例如“Foo {0} bar”,如果用户选择了一个范围,则将所选范围插入到字符串中以代替“ {0}”。
例如,如果 textarea 包含“Example 1 2 3”并且光标位于“Example 1| 2 3”,则该函数会将值更改为“Example 1Foo blah bar 2 3”(valueIfNothingSelected 是“废话”在这种情况下)。如果选择了“1 2”范围,该函数会将值改为“Example Foo 1 2 bar 3”。
在 Chrome 中,我测试了这个功能,它完成了它应该做的事情,但我无法用undo 撤销更改。
function insertTextAtCursor(text, valueIfNothingSelected) {
var field = $('textarea[name="task_log_description"]')[0];
var startPos = field.selectionStart;
var endPos = field.selectionEnd;
var processedText;
if (startPos == endPos) {
processedText = text.replace('{0}', valueIfNothingSelected);
field.value = field.value.substring(0, startPos) + processedText + field.value.substring(endPos, field.value.length);
field.selectionStart = startPos + text.indexOf('{0}');
field.selectionEnd = field.selectionStart + valueIfNothingSelected.length;
} else {
var selectedText = field.value.substring(startPos, endPos);
processedText = text.replace('{0}', selectedText);
field.value = field.value.substring(0, startPos) + processedText + field.value.substring(endPos, field.value.length);
field.selectionStart = startPos + text.indexOf('{0}');
field.selectionEnd = field.selectionStart + selectedText.length;
}
field.focus();
}
【问题讨论】:
-
ctrl-z 已经在 Ubuntu 14.04 上的 Chrome+Firefox 中为我工作。什么情况下它不适合你?
-
@Jack 扩展问题以包括我的 javascript 方法。无论出于何种原因,
Ctrl-z在使用此方法时不起作用。
标签: javascript forms undo-redo