当在textarea标签中按TAB
并插入\t
字符时,有很多关于如何防止对下一个元素进行聚焦的问题。或任何其他角色。所有这些都回答了类似的事情:
\t
或任何用户想要的内容。所有这一切都正常,直到您在CTRL+Z
之后按“撤消”或TAB
如果这样做,您将遇到一些副作用,具体取决于您使用的浏览器:
\t
,但是插入符号位置会结束,而textarea中的所有文本都会被选中\t
计为用户输入,因此CTRL+Z
将撤消上一次操作,保留\t
,还有一些难以预测的插入符问题< / LI>
您可以在此处http://jsfiddle.net/c7zc8/1/
观看问题是如何使它成为crossbrowser和“undoable”?
答案 0 :(得分:3)
对于最新的Chrome(33),以下作品:
var ta = document.getElementById("textareaId");
ta.addEventListener("keydown", function(e) {
if (e.which===9) {
e.preventDefault();
document.execCommand("insertText", false, "\t");
}
}, false);
参考: Javascript textarea undo redo
然而,对于IE,没有完美的解决方案。 IE11有ms-beginUndoUnit和ms-endUndoUnit,但即便如此,根据Tim Down的说法也不行 internet explorer alternative to document.execCommand("insertText",...), for text insertion that can be undone/redone by the user