Javascript HTML文本区域选项卡支持

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字符。当我开始尝试让它工作时,我注意到如果我按

我正在制作一个基于web的代码编辑器,并使用textarea进行文本编辑。我想向文本区域添加tab支持,这样按tab键就不会使元素失去焦点。 我对textarea的定义如下:

功能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;
    }
}
我的两个问题是:

  • 为什么添加警报会导致添加选项卡
  • 有没有一种方法可以在光标处添加选项卡而不必找到光标 定位、拆分文本区域中的文本并手动添加选项卡 字符(并且不必在用户每次按tab键时都发出警报)
  • 谢谢

    编辑:这似乎只适用于Chrome,而不适用于IE、Safari或Firefox

    您正在查找
    .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吗?