我正在制作一个基于Web的代码编辑器,并使用textarea进行文本编辑。我想为textarea添加制表符支持,以便按Tab键不会使元素散焦。 我的textarea定义如下:
<textarea id="codeEdit_txt" rows="50" cols="80" onkeydown="return codeEdit_keyDown(event);">
和函数codeEdit_keyDown定义为:
function codeEdit_keyDown(e) {
if (e.keyCode == 9) {
return false;
}
}
这可以防止Tab键按下使textarea失焦,尽管它不会留下Tab键。虽然我最初试图让它工作,但我注意到如果我将函数定义如下,它会在光标位置放置一个制表符。
function codeEdit_keyDown(e) {
if (e.keyCode == 9) {
alert("");
return false;
}
}
我的两个问题是:
由于
编辑:这似乎只适用于Chrome,而不适用于IE,Safari或Firefox
答案 0 :(得分:2)
答案 1 :(得分:0)
另一个答案很好,但是它在选项卡末尾结束。 我查看了如何在光标位置添加选项卡,并将其添加到解决方案中。
您可以在这里找到工作代码:http://jsfiddle.net/felixc/o2ptfd5z/9/
内联代码作为保障:
function insertAtCursor(myField, myValue) {
//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;
}
}
function addTabSupport(elementID, tabString) {
// Get textarea element
var myInput = document.getElementById(elementID);
// At keydown: Add tab character at cursor location
function keyHandler(e) {
var TABKEY = 9;
if(e.keyCode == TABKEY) {
insertAtCursor(myInput, tabString);
if(e.preventDefault) {
e.preventDefault();
}
return false;
}
}
// Add keydown listener
if(myInput.addEventListener ) {
myInput.addEventListener('keydown',keyHandler,false);
} else if(myInput.attachEvent ) {
myInput.attachEvent('onkeydown',this.keyHandler); /* damn IE hack */
}
}
// easily add tab support to any textarea you like
addTabSupport("input", "\t");
<h1>Click in the text and hit tab</h1>
<textarea id="input" rows=10 cols=50>function custom(data){
return data;
}</textarea>