如题,换行符在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 控制输入文字个数(换行不算)的更多相关文章

  1. js对输入文字个数的限制...

    发表留言或者微博的时候,对输入文字个数的限制,下面分两种情况,每种分别介绍两种实现方式: 第一种:一个汉字算一位,两个字母或符号算一位. 通过ASCII编码来判断 textarea.onkeyup = ...

  2. js 控制输入文字的字数

    直接上代码. <html> <head> </head> <body> <textarea id='txtArea' cols='50' rows ...

  3. js判断输入字符串长度(汉字算两个字符,字母数字算一个)

    js判断输入字符串长度(汉字算两个字符,字母数字算一个) 文本输入时,由于数据库表字段长度限制会导致提交失败,因此想到了此方法验证. 废话不多说上代码: <html> <head&g ...

  4. 禁止表单操作及JS控制输入的方式

    <div>表单元素特殊属性<input type="text" value="禁止输入" disabled /></div> ...

  5. js实现文本框输入文字个数限制代码

    html: <div class="curr_eval_box">                <input type="hidden" n ...

  6. js控制html文字提示语的出现和隐藏

    有时我们需要在点击html输入框的时候,旁边会出现提示语.在输入字符的时候,输入框下边会出现输入了多少字符的提示. 请看下面实例. <!DOCTYPE html> <html> ...

  7. js统计输入文字的字节数(byte)

    这里主要考虑的是日文,日文中包含了半角和全角文字,半角算1,全角算2. <html> <head> <script language="javascript&q ...

  8. jquery判断输入文字个数的统计代码

    1.js代码部分 <script type="text/javascript">             $(function() { function albumNa ...

  9. js 控制选中文字

     //脚本获取网页中选中文字 var word = document.selection.createRange().text;  //获取选中文字所在的句子 var range =  documen ...

随机推荐

  1. 交叉验证(CrossValidation)方法思想简介[zz]

    以下简称交叉验证(Cross Validation)为CV.CV是用来验证分类器的性能一种统计分析方法,基本思想是把在某种意义下将原始数据(dataset)进行分组,一部分做为训练集(train se ...

  2. unity, 立即生效动画:Animation.sample()

    在调用了动画播放之后,动画并不会立即应用(骨骼Transform并不会立即改变),最快也要等到本帧lateUpdate才能生效. 如果有特殊需求,希望在调用了动画播放之后立即生效,则可以紧接着调一句A ...

  3. java.io.IOException: Incompatible namespaceIDs

    问题描述:   在实验的时候,需要往以前的集群中添加一台datanode,在添加之前,由于在调式namenode的时候,格式化了dfs,这就导致了namenode上的namespaceID和以前集群上 ...

  4. iframe父页面获取iframe子页面的元素 与 iframe子页面获取父页面元素

    一.在iframe子页面获取父页面元素代码如下:$('#objld', parent.document); 二.在父页面获取iframe子页面的元素代码如下:$("#objid", ...

  5. Android: 设置 app 字体大小不跟随系统字体调整而变化

    在做 app 内字体大小的需求,类似于 微信中设置字体大小. 那么就需要 app 不跟随系统字体大小调整而变化,找到了两个方法. 方法1: 重写 getResource() 方法,修改 configu ...

  6. ExcelConvert

    public static class ExcelConvert { #region - 由数字转换为Excel中的列字母 - public static int ToIndex(string col ...

  7. Fluent UDF【5】:第一个UDF

    这里以一个简单的初始化案例来描述UDF的使用过程. 0 Fluent中的Patch Fluent中提供了全域初始化以及局部Patch功能.对于整体区域的全局初始化可以采用starndard及hybri ...

  8. NET Core 1.1 版本项目和2.0环境下的项目开发注意事项

    在NET Core 1.1开发下的项目最好不要随便把工具更新升级到2.0,这样最容易导致之前的.NETCore直接被升级不兼容早前版本 会引起项目无法启动在运行调试IIS express 时候直接一闪 ...

  9. ubuntu 解压命令

    ubuntu解压命令.tar解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)———————————————. ...

  10. pyspark 编写 UDF函数

    pyspark 编写 UDF函数 前言 以前用的是Scala,最近有个东西要用Python,就查了一下如何编写pyspark的UDF. pyspark udf 也是先定义一个函数,例如: def ge ...