Javascript HTML文本区域选项卡支持
我正在制作一个基于web的代码编辑器,并使用textarea进行文本编辑。我想向文本区域添加tab支持,这样按tab键就不会使元素失去焦点。 我对textarea的定义如下:Javascript HTML文本区域选项卡支持,javascript,html,Javascript,Html,我正在制作一个基于web的代码编辑器,并使用textarea进行文本编辑。我想向文本区域添加tab支持,这样按tab键就不会使元素失去焦点。 我对textarea的定义如下: 功能codeEdit_keyDown定义为: function codeEdit_keyDown(e) { if (e.keyCode == 9) { return false; } } 这可以防止按tab键使文本区域不聚焦,但不会留下tab字符。当我开始尝试让它工作时,我注意到如果我按
功能codeEdit_keyDown定义为:
function codeEdit_keyDown(e) {
if (e.keyCode == 9) {
return false;
}
}
这可以防止按tab键使文本区域不聚焦,但不会留下tab字符。当我开始尝试让它工作时,我注意到如果我按照下面的方式定义函数,它会在光标位置放置一个制表符
function codeEdit_keyDown(e) {
if (e.keyCode == 9) {
alert("");
return false;
}
}
我的两个问题是:
.preventDefault()代码>
编辑:A
编辑2:一个更好的答案,多亏了。另一个答案很好,但它在末尾结束了选项卡。
我查看了如何在光标位置添加选项卡,并将其添加到解决方案中
您可以在此处找到工作代码:
内联代码作为保护措施:
函数insertAtCursor(myField,myValue){
//IE支持
if(文档选择){
myField.focus();
sel=document.selection.createRange();
sel.text=myValue;
}
//MOZILLA和其他
else if(myField.selectionStart | | myField.selectionStart=='0'){
var startPos=myField.selectionStart;
var endPos=myField.selectionEnd;
myField.value=myField.value.substring(0,startPos)
+我的价值
+myField.value.substring(endPos,myField.value.length);
myField.selectionStart=startPos+myValue.length;
myField.selectionEnd=startPos+myValue.length;
}否则{
myField.value+=myValue;
}
}
函数addTabSupport(elementID,tabString){
//获取textarea元素
var myInput=document.getElementById(elementID);
//在向下键:在光标位置添加制表符
函数keyHandler(e){
var-TABKEY=9;
if(e.keyCode==TABKEY){
insertAtCursor(myInput,tabString);
如果(如默认){
e、 预防默认值();
}
返回false;
}
}
//添加键控侦听器
if(myInput.addEventListener){
myInput.addEventListener('keydown',keyHandler,false);
}else if(myInput.attachEvent){
myInput.attachEvent('onkeydown',this.keyHandler);/*该死的IE黑客*/
}
}
//轻松地将选项卡支持添加到您喜欢的任何文本区域
addTabSupport(“输入”和“\t”)代码>
单击文本并点击选项卡
函数自定义(数据){
返回数据;
}
我在寻找答案的过程中发现了这个问题,虽然默认设置没有失去焦点,但没有添加制表符。有没有办法也添加制表符?我修改了Josh的小提琴来添加制表符-对我来说非常合适。荣誉乔希。对不起,我明白了,代码是手动为选项卡添加了4个空格。我希望能够添加光标所在的选项卡,所以我想在TeXBoo/TeXTaReA中现有文本的中间添加它。我是否只需要找到光标位置,将其拆分并在两个拆分之间插入制表符?后一个小提琴正在添加文字制表符'\t'。当文本框跳到下一个制表位时,文本框可能会以更少的值呈现它,但它在那里。this.value+=“\t”;如果你想要真正的标签,这是解决方案:)我刚刚尝试了这个链接,它似乎在Chrome中工作,而不是IE、firefox或safari。这可能是chrome中的一个bug吗?