之前弄的一个报告在线编辑器是支持 Markdown 的代码块的,但是我在写的时候有个很不爽的情况: 在编辑器里如果按下 Tab 会执行预设事件,也就是 focus 或 unfocus ,但是我只是想要让它空四格啊 QAQ ,所以我这个时候就上网找了点解决方案
首先,我们要先知道 Tab (为了方便,暂时用 4 个空格取代)是在现在的位置插入 4 个空格,所以首先我们要先找出如何让 JS 定位现在的光表位置並插入指令字串:
function insertAtCursor(myValue) {
myField = document.getElementById("textarea");
//IE support
if (document.selection) {
myField.focus();
sel = document.selection.createRange();
sel.text = myValue;
}
//MOZILLA and others
else if (myField.selectionStart || myField.selectionStart == '0') {
var startPos = myField.selectionStart;
var endPos = myField.selectionEnd;
myField.value = myField.value.substring(0, startPos)
+ myValue
+ myField.value.substring(endPos, myField.value.length);
myField.selectionStart = startPos + myValue.length;
myField.selectionEnd = startPos + myValue.length;
} else {
myField.value += myValue;
}
}
有这个核心代码 ,剩下就简单啦,只要挂上一个 event listener 监听键盘,遇到 Tab 时就插入空格, Tab 的 KeyCode 是 9 ,所以用如下代码即可
document.getElementById('textarea').onkeydown = function(e){
if (e.keyCode == 9) {
insertAtCursor(' ');
return false;
}
}
现在在 id='textarea' 的编辑器里面按下 Tab ,应该会自己空四格了