让TextArea支持Tab键(兼容IE、FF)

本文介绍了一段JavaScript代码,用于在网页文本编辑器中实现Tab键功能,支持IE和Firefox浏览器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

显示列表

http://www.huanghengxu.com/Html/Article/125.htm

<script language="JavaScript">
<!--
var TextAreaTab =
{
   Register : function(obj)
   {
       // 绑定事件
       obj.onclick = new Function('TextAreaTab.CreateInsertPosition(this)');
       obj.onselect = new Function('TextAreaTab.CreateInsertPosition(this)');
       obj.onkeyup = new Function('TextAreaTab.CreateInsertPosition(this)');
       obj.onkeydown = new Function('TextAreaTab.InsertTab(this)');
   },
   // 这个只对ie有用
   // 创建光标所在位置的对象,就是要插入的位置。
   // 其实就是光标选中的对象,对它进行操作就可以了。
   CreateInsertPosition : function(obj)
   {
       if (obj.createTextRange) // IE
       {
           obj.InsertPosition = document.selection.createRange().duplicate(); // 光标选中的对象
       }
   },
   InsertTab : function(obj)
   {
       var evt = this.GetEvent(); // 返回 event 对象
       if (evt.keyCode == 9) // 按下了Tab键
       {
           if (obj.createTextRange && obj.InsertPosition) // IE
           {
               // 赋予对象内容
               obj.InsertPosition.text = '/t';
               evt.returnValue = false;
           }
           else if (window.getSelection) // FF
           {
               var scrollTop = obj.scrollTop; // 滚动的位置
               var start = obj.selectionStart; // 当前光标所在位置

               var pre = obj.value.substr(0, obj.selectionStart); // 光标之前的内容
               var next = obj.value.substr(obj.selectionEnd); // 光标之后的内容
               obj.value = pre + '/t' + next;

               evt.preventDefault();
               // 设置光标在插入点之后的位置
               obj.selectionStart = start + 1;
               obj.selectionEnd = start + 1;
               obj.scrollTop = scrollTop;
           }
       }
   },
   // 返回 event 对象
   GetEvent : function()
   {
       if(document.all) // IE
       {
           return window.event;
       }

       func = this.GetEvent.caller;
       while(func != null)
       {
           var arg0 = func.arguments[0];
           if(arg0)
           {
               if((arg0.constructor == Event || arg0.constructor == MouseEvent)
                   ||(typeof(arg0) == "object" && arg0.preventDefault && arg0.stopPropagation))
               {
                   return arg0;
               }
           }
           func = func.caller;
       }
       return null;
   }
}
//-->
</script>

<textarea id="TextArea" rows="10" cols="50"></textarea>
<script language="JavaScript">
<!--
var textarea = document.getElementById('TextArea');
TextAreaTab.Register(textarea); // 注册一下对象,就可以让这个对象现实Tab功能
//-->
</script>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值