js 控制输入文字个数(换行不算)
如题,换行符在textarea中是要当成一个字符的。用普通的maxlength属性就不行了,于是想到通过事件来控制输入文字的长度。
注意哦,回车换行不能算成字符。这样的话,普通的substring等方法可能都不适用,要考虑文字中的换行符。
目前的实现如下,还有不完美的地方。如drag事件没有考虑。
<html>
<head>
</head>
<body>
<p>
textArea2
</p>
<textarea id='txtArea2' data-maxlength=10 cols='50' rows='10'></textarea>
<script> var txtArea2 = document.getElementById("txtArea2");
txtArea2.onkeydown = function(e) {
var maxlength = this.getAttribute("data-maxlength"); var selectionText = this.value.substring(this.selectionStart, this.selectionEnd);
var selectionCnt = getLength(selectionText); if (getLength(this.value) - selectionCnt >= maxlength) {
// 退格键,回车键,删除键,上下左右键
if (! (e.keyCode == 8 || e.keyCode == 13 || e.keyCode == 46 || (e.keyCode >= 37 && e.keyCode <= 40))) {
e.preventDefault();
}
} } txtArea2.oninput = function() {
// 只要有输入,就会触发,包括日语输入法,这个事件不能去
var txtArea = this;
var maxlength = txtArea.getAttribute("data-maxlength");
txtArea.value = txtArea.value.substr(0, maxlength);
} txtArea2.onpaste = function(e) {
// 粘贴事件,只对应chorme。IE的话用window.clipboardData
var clipboardData = e.clipboardData;
var data = clipboardData.getData('Text');
if (data != '') {
var part1 = this.value.substring(0, this.selectionStart);
var part2 = this.value.substring(this.selectionStart, this.selectionEnd);
var part3 = this.value.substring(this.selectionEnd); var maxlength = this.getAttribute("data-maxlength"); var allowlength = maxlength - getLength(part1) - getLength(part3);
var pasteData = data.substr(0, allowlength);
var newStr = part1 + pasteData + part3;
this.value = newStr;
this.selectionStart = this.selectionEnd = part1.length + pasteData.length;
console.log(newStr);
e.preventDefault();
}
} // 字符统计函数(回车换行算字符)
function getLength(input) {
input = input || '';
input = input.replace(/\n/g, '');
return input.length;
}
</script>
</body> </html>
上面的只是测试用的,没有包装成通用方法。不过效果已经实现了。
在此记录一下,有空再来完善一下。
测试环境:chorme。
IE未测试。
js 控制输入文字个数(换行不算)的更多相关文章
- js对输入文字个数的限制...
发表留言或者微博的时候,对输入文字个数的限制,下面分两种情况,每种分别介绍两种实现方式: 第一种:一个汉字算一位,两个字母或符号算一位. 通过ASCII编码来判断 textarea.onkeyup = ...
- js 控制输入文字的字数
直接上代码. <html> <head> </head> <body> <textarea id='txtArea' cols='50' rows ...
- js判断输入字符串长度(汉字算两个字符,字母数字算一个)
js判断输入字符串长度(汉字算两个字符,字母数字算一个) 文本输入时,由于数据库表字段长度限制会导致提交失败,因此想到了此方法验证. 废话不多说上代码: <html> <head&g ...
- 禁止表单操作及JS控制输入的方式
<div>表单元素特殊属性<input type="text" value="禁止输入" disabled /></div> ...
- js实现文本框输入文字个数限制代码
html: <div class="curr_eval_box"> <input type="hidden" n ...
- js控制html文字提示语的出现和隐藏
有时我们需要在点击html输入框的时候,旁边会出现提示语.在输入字符的时候,输入框下边会出现输入了多少字符的提示. 请看下面实例. <!DOCTYPE html> <html> ...
- js统计输入文字的字节数(byte)
这里主要考虑的是日文,日文中包含了半角和全角文字,半角算1,全角算2. <html> <head> <script language="javascript&q ...
- jquery判断输入文字个数的统计代码
1.js代码部分 <script type="text/javascript"> $(function() { function albumNa ...
- js 控制选中文字
//脚本获取网页中选中文字 var word = document.selection.createRange().text; //获取选中文字所在的句子 var range = documen ...
随机推荐
- [转] linux(debian)安装USB无线网卡(tp-link TL-WN725N rtl8188eu )
1: 台式机家里面不想再走线了. 于是去某东买了个USB无线网卡.tp的WN725N USB,非常小, 和罗技的优联接收器差不多大. 2: 驱动能自己识别是不指望了,既然是usb网卡,插入USB后 ...
- Python 爬虫 解决escape问题
爬取某个国外的网址,遇到的编码问题 ,在前段页面 返回的数据是 亞洲私人珍藏賣,令仝好分享他為此 所傾注的心血與熱愛。 爬虫源码是: url = 'http://www.bonhams.com/auc ...
- 如何在ppt或word中添加高亮代码?
如何在ppt或word中添加高亮代码? 问题: 如何ppt中添加带有语法高亮的程序代码,就如同下面的形式(在ppt嵌入高亮代码,且可以编辑,带有行号) 详细的要求如下: 1.代码带有语法高亮. 2.结 ...
- laravel用redis保存session遇到的坑,没报错,但redis-cli就是查不到
laravel用redis保存session遇到的坑, 配置redis存储session流程是这样的 在.evn文件中把session驱动和连接改为了redis的 如下: SESSION_DRIVER ...
- 使用C# 链接 Mysql 显示??? 乱码 的解决方案
下载以下文件 mysql-connector-odbc-5.3.6-win32.msi 下载并打开以下文件: mysql-installer-community-5.6.28.0.msi 安装mysq ...
- MarkDown 使用指南
https://frankbing.gitbooks.io/markdown/content/
- Flex tree加三状态的Checkbox
网上有下过其它人的实现的样例.可是样式不好改.还有就是不能初始化选中,还有三态效果那个半选中状态也是不清楚.所以自己依据Itemrender搞了一个,还凑合 效果如图:全选和半选状态,Checkbox ...
- JasperReport学习札记6-JRXML的标签
原文源于:http://langhua9527.iteye.com/blog/402317 JasperReport学习笔记6-JRXML的标签1.<jasperReport>根元素包括很 ...
- pannel加载form
panel2.Controls.Clear(); frm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; frm.ShowIc ...
- IBAction:IBOutlet:注意事项
1.IBAction: 1> 能保证方法能够连线 > 相当于void 2.IBOutlet: 1> 能保证属性能够连线 3.常见错误 setValue:forUndefinedKey ...