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学习笔记1 数据类型
Jan 11 Javascript
javascript 函数声明与函数表达式的区别介绍
Oct 05 Javascript
javascript设计模式之中介者模式Mediator
Dec 30 Javascript
VC调用javascript的几种方法(推荐)
Aug 09 Javascript
[js高手之路]设计模式系列课程-发布者,订阅者重构购物车的实例
Aug 29 Javascript
vue 根据数组中某一项的值进行排序的方法
Aug 30 Javascript
vsCode安装使用教程和插件安装方法
Aug 24 Javascript
layui 图片上传+表单提交+ Spring MVC的实例
Sep 21 Javascript
vue ajax 拦截原理与实现方法示例
Nov 29 Javascript
Vue常用的全选/反选的示例代码
Feb 19 Javascript
js+canvas实现五子棋小游戏
Aug 02 Javascript
vue实现滑动解锁功能
Mar 03 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
实现树状结构的两种方法
2006/10/09 PHP
探讨:使用XMLSerialize 序列化与反序列化
2013/06/08 PHP
php获取指定数量随机字符串的方法
2017/02/06 PHP
PHP中数组转换为SimpleXML教程
2019/01/27 PHP
基于PHP的登录和注册的功能的实现
2020/08/06 PHP
jQuery将多条数据插入模态框的示例代码
2014/09/25 Javascript
Javascript定义类(class)的三种方法详解
2015/03/13 Javascript
PHP和NodeJs开发的应用如何共用Session
2015/04/16 NodeJs
js淡入淡出的图片轮播效果代码分享
2015/08/24 Javascript
JS验证邮件地址格式方法小结
2015/12/01 Javascript
Angular发布1.5正式版,专注于向Angular 2的过渡
2016/02/18 Javascript
Yarn的安装与使用详细介绍
2016/10/25 Javascript
浅谈Node.js:Buffer模块
2016/12/05 Javascript
详解vuelidate 对于vueJs2.0的验证解决方案
2017/03/09 Javascript
详解nodejs微信公众号开发——4.自动回复各种消息
2017/04/11 NodeJs
AngularJS实现的获取焦点及失去焦点时的表单验证功能示例
2017/10/25 Javascript
[46:20]TFT vs Secret Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
[01:14]TI珍贵瞬间系列(六):冠军
2020/08/30 DOTA
分享一个简单的python读写文件脚本
2017/11/25 Python
python3.6 实现AES加密的示例(pyCryptodome)
2018/01/10 Python
python多线程之事件Event的使用详解
2018/04/27 Python
python读取txt文件中特定位置字符的方法
2018/12/24 Python
详解Python文件修改的两种方式
2019/08/22 Python
Tensorflow 定义变量,函数,数值计算等名字的更新方式
2020/02/10 Python
在PyCharm中实现添加快捷模块
2020/02/12 Python
Jupyter notebook快速入门教程(推荐)
2020/05/18 Python
解析Python 偏函数用法全方位实现
2020/06/26 Python
Python变量格式化输出实现原理解析
2020/08/06 Python
python 从list中随机取值的方法
2020/11/16 Python
Python创建简单的神经网络实例讲解
2021/01/04 Python
Canvas在超级玛丽游戏中的应用详解
2021/02/06 HTML / CSS
爱心捐助倡议书
2014/05/19 职场文书
国际贸易实务实训报告
2014/11/05 职场文书
毕业生党员个人总结
2015/02/14 职场文书
小学教师见习总结
2015/06/23 职场文书
Python+Selenium自动化环境搭建与操作基础详解
2022/03/13 Python