JavaScript让Textarea支持tab按键的方法


Posted in Javascript onJune 26, 2015

本文实例讲述了JavaScript让Textarea支持tab按键的方法。分享给大家供大家参考。具体实现方法如下:

HTMLTextAreaElement.prototype.getCaretPosition = function () {
//return the caret position of the textarea
 return this.selectionStart;
};
HTMLTextAreaElement.prototype.setCaretPosition = function (position) {
//change the caret position of the textarea
 this.selectionStart = position;
 this.selectionEnd = position;
 this.focus();
};
HTMLTextAreaElement.prototype.hasSelection = function () {
//if the textarea has selection then return true
 if (this.selectionStart == this.selectionEnd) {
  return false;
 } else {
  return true;
 }
};
HTMLTextAreaElement.prototype.getSelectedText = function () {
//return the selection text
 return this.value.substring(this.selectionStart, this.selectionEnd);
};
HTMLTextAreaElement.prototype.setSelection = function (start, end) {
//change the selection area of the textarea
 this.selectionStart = start;
 this.selectionEnd = end;
 this.focus();
};
var textarea = document.getElementsByTagName('textarea')[0]; 
textarea.onkeydown = function(event) {
 //support tab on textarea
 if (event.keyCode == 9) { //tab was pressed
  var newCaretPosition;
  newCaretPosition = textarea.getCaretPosition() + " ".length;
  textarea.value = textarea.value.substring(0, textarea.getCaretPosition()) + " " + textarea.value.substring(textarea.getCaretPosition(), textarea.value.length);
  textarea.setCaretPosition(newCaretPosition);
  return false;
 }
 if(event.keyCode == 8){
 //backspace
  if (textarea.value.substring(textarea.getCaretPosition() - 4, textarea.getCaretPosition()) == " ") {
  //it's a tab space
   var newCaretPosition;
   newCaretPosition = textarea.getCaretPosition() - 3;
   textarea.value = textarea.value.substring(0, textarea.getCaretPosition() - 3) + textarea.value.substring(textarea.getCaretPosition(), textarea.value.length);
   textarea.setCaretPosition(newCaretPosition);
  }
 }
 if(event.keyCode == 37){ //left arrow
  var newCaretPosition;
  if (textarea.value.substring(textarea.getCaretPosition() - 4, textarea.getCaretPosition()) == " ") {
  //it's a tab space
   newCaretPosition = textarea.getCaretPosition() - 3;
   textarea.setCaretPosition(newCaretPosition);
  } 
 }
 if(event.keyCode == 39){
 //right arrow
  var newCaretPosition;
  if (textarea.value.substring(textarea.getCaretPosition() + 4, textarea.getCaretPosition()) == " ") {
  //it's a tab space
   newCaretPosition = textarea.getCaretPosition() + 3;
   textarea.setCaretPosition(newCaretPosition);
  }
 } 
}

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
JavaScript基本概念初级讲解论坛贴的学习记录
Feb 22 Javascript
控制input输入框中提示信息的显示和隐藏的方法
Feb 12 Javascript
AngularJS入门知识之MVW类框架的编程思想探讨
Dec 08 Javascript
javascript创建函数的20种方式汇总
Jun 23 Javascript
JavaScrip调试技巧之断点调试
Oct 22 Javascript
cropper js基于vue的图片裁剪上传功能的实现代码
Mar 01 Javascript
JavaScript 中的 this 工作原理
Jun 20 Javascript
微信小程序实现红包雨功能
Jul 11 Javascript
微信小程序用户授权,以及判断登录是否过期的方法
May 10 Javascript
原生js实现的金山打字小游戏(实例代码详解)
Mar 16 Javascript
vue.js实现h5机器人聊天(测试版)
Jul 16 Javascript
Vue通过懒加载提升页面响应速度
May 10 Vue.js
javascript实现textarea中tab键的缩排处理方法
Jun 26 #Javascript
jQuery根据用户电脑是mac还是pc加载对应样式的方法
Jun 26 #Javascript
jQuery实现鼠标划过添加和删除class的方法
Jun 26 #Javascript
jQuery实现网站添加高亮突出显示效果的方法
Jun 26 #Javascript
jQuery匹配文档链接并添加class的方法
Jun 26 #Javascript
jquery计算鼠标和指定元素之间距离的方法
Jun 26 #Javascript
jquery操作angularjs对象
Jun 26 #Javascript
You might like
德生S2000收音机更换“钕铁硼”全频扬声器
2021/03/02 无线电
解析thinkphp中的M()与D()方法的区别
2013/06/22 PHP
ThinkPHP调试模式与日志记录概述
2014/08/22 PHP
PHP中构造函数和析构函数解析
2014/10/10 PHP
解决laravel上传图片之后,目录有图片,但是访问不到(404)的问题
2019/10/14 PHP
JavaScript Prototype对象
2009/01/07 Javascript
JavaScript游戏之是男人就下100层代码打包
2010/11/08 Javascript
jquery乱码与contentType属性设置问题解决方案
2013/01/07 Javascript
JavaScript中的索引数组、关联数组和静态数组、动态数组讲解
2014/11/08 Javascript
JavaScript分析、压缩工具JavaScript Analyser
2014/12/31 Javascript
JS对字符串编码的几种方式使用指南
2015/05/14 Javascript
js判断上传文件后缀名是否合法
2016/01/28 Javascript
动态更新highcharts数据的实现方法
2016/05/28 Javascript
javaScript如何跳出多重循环break、continue
2016/09/01 Javascript
Vue.js实现按钮的动态绑定效果及实现代码
2017/08/21 Javascript
Vue 中mixin 的用法详解
2018/04/23 Javascript
react配合antd组件实现的管理系统示例代码
2018/04/24 Javascript
vue.extend与vue.component的区别和联系
2018/09/19 Javascript
详解Vue-Router源码分析路由实现原理
2019/05/15 Javascript
vue实现div可拖动位置也可改变盒子大小的原理
2020/09/16 Javascript
vue 中this.$set 动态绑定数据的案例讲解
2021/01/29 Vue.js
[13:18]《一刀刀一天》之DOTA全时刻21:详解TI新赛制 A队再露獠牙
2014/06/24 DOTA
Python 多线程实例详解
2017/03/25 Python
python 地图经纬度转换、纠偏的实例代码
2018/08/06 Python
python pygame实现2048游戏
2018/11/20 Python
详解Python中正则匹配TAB及空格的小技巧
2019/07/26 Python
详解python 条件语句和while循环的实例代码
2020/12/28 Python
纯CSS实现右侧底部悬浮效果(悬浮QQ、微信、微博、邮箱等联系方式)
2015/04/24 HTML / CSS
CSS3 RGBA色彩模式使用实例讲解
2016/04/26 HTML / CSS
浅析rem和em和px vh vw和% 移动端长度单位
2016/04/28 HTML / CSS
安德玛比利时官网:Under Armour比利时
2019/08/28 全球购物
党员批评与自我批评发言材料
2014/10/14 职场文书
复兴之路纪录片观后感
2015/06/02 职场文书
2019年销售人员的职业生涯规划书
2019/03/25 职场文书
k8s部署redis cluster集群的实现
2021/06/24 Redis
mysql 联合索引生效的条件及索引失效的条件
2021/11/20 MySQL