文章参考地址:http://blog.csdn.net/nhconch/article/details/4223076

需求背景:

前几天,因为客户有一个需求说,需要对一个评论(一个textarea文本框)的长度进行限制,简单的理解就是 这个文本框只能输入100个字符,然后就不能在输入了!

实现方案一:用maxlength属性

 <textarea maxlength="10"></textarea>

这个方式很简单的哦,但是 在我这边测试的时候,并不能完全兼容主流浏览器

兼容性效果如下:

IE8 Firefox 17 Chrome 23
不兼容 兼容 兼容

实现方案二:用javascript实现

<textarea name="txt1" cols="45" rows="2" onKeyDown='if (this.value.length>=20){event.returnValue=false}'></textarea>

这里就用到了一个onKeyDown。但是效果也不太理想。

兼容性效果如下:

IE8 Firefox 17 Chrome 23
兼容 不兼容 兼容

实现方案三:综合上面的方法

因为上面无法兼容IE 和firefox,没办法,只能贱一点了!~所以,我就把上面的方法给综合起来~~

代码如下:

 <textarea name="txt1" cols="45" maxlength="20" rows="2"  onKeyDown='if (this.value.length>=20){event.returnValue=false}'>b</textarea>

注意哦,我只是把maxlength加上了!

兼容性效果如下:

IE8 Firefox 17 Chrome 23
兼容 兼容 兼容

原因很简单,maxlength是对firefox和chrome兼容,而那js代码是对IE 兼容。所以就ok啦!!我把

嘻嘻。。那天因为要提交这个ticket 所以急着交咯,反正客户那边通过啦。。哇哇哇。。

实现方案四:JavaScript的substring

 <textarea name="blogdesc" cols="50" rows="5" onkeyup="limitLength(this,20)">x </textarea>  

js 代码:

function limitLength(obj, length) {
var desc = obj.value;
obj.value = substr(obj.value, length);
}
function substr(str, length) {
var l = 0, i = 0;
while (l < length && i < str.length) {
l += 1;
if (str.substring(i, i + 1).match(/[\u4e00-\u9fa5]/)) l += 2; //一个中文是相当于3个英文
i += 1;
}
return str.substring(0, i);
}

兼容性效果如下:

IE8 Firefox 17 Chrome 23
兼容 兼容 兼容

但是,其实这个虽然上面三个都兼容,但是有一个很不友好的问题是,当你达到字符限制的时候,它还会打出来,直到你松开按键的时候就好了。不过,这个时候 会有闪一下把后面多余的字符给删除了!~。不太友好哦!~亲。

实现方案五:JavaScript

 <textarea maxlength="10" onpropertychange="onmyinput(this)" oninput="return onmyinput(this)"
onpaste="return onmypaste(this);" onkeypress="return onmykeypress(this);"></textarea>

js代码是:

function onmyinput(o) {
if (o.value.length >= o.getAttribute("maxlength")) {
if (o.value.length > o.getAttribute("maxlength"))
o.value = o.value.substring(0, o.getAttribute("maxlength"));
return false;
}
return true;
}
function mygetclipdata() {
if (!document.all) {
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
trans.addDataFlavor('text/unicode');
var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
clip.getData(trans, clip.kGlobalClipboard);
var str = new Object();
var strLength = new Object();
trans.getTransferData("text/unicode", str, strLength);
if (str)
str = str.value.QueryInterface(Components.interfaces.nsISupportsString);
var pastetext;
if (str)
pastetext = str.data.substring(0, strLength.value / 2);
return pastetext;
}
else {
return window.clipboardData.getData("Text");
}
}
function mysetclipdata(o) {
if (!document.all) {
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
trans.addDataFlavor("text/unicode");
var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
str.data = o;
trans.setTransferData("text/unicode", str, o.length * 2);
var clipid = Components.interfaces.nsIClipboard;
clip.setData(trans, null, clipid.kGlobalClipboard);
}
else {
window.clipboardData.setData("Text", o);
}
}
function onmypaste(o) {
var nMaxLen = o.getAttribute ? parseInt(o.getAttribute("maxlength")) : "";
if (!document.all) {
alert("不可能执行的代码");
}
else { if (document.selection.createRange().text.length > 0) {
var ovalueandclipboarddata = o.value + window.clipboardData.getData("Text");
if (o.getAttribute && ovalueandclipboarddata.length - document.selection.createRange().text.length > nMaxLen) {
if (window.clipboardData.getData("Text").substring(0, document.selection.createRange().text.length + nMaxLen - o.value.length) != "")
window.clipboardData.setData("Text", window.clipboardData.getData("Text").substring(0, document.selection.createRange().text.length + nMaxLen - o.value.length));
else
return false;
}
}
else {
var ovalueandclipboarddata = o.value + window.clipboardData.getData("Text");
if (o.getAttribute && ovalueandclipboarddata.length > nMaxLen) {
if (ovalueandclipboarddata.substring(0, nMaxLen - o.value.length) != "")
window.clipboardData.setData("Text", ovalueandclipboarddata.substring(0, nMaxLen - o.value.length));
else
return false;
}
}
return true;
}
}
function onmykeypress(o) {
if (!document.all) {
var nMaxLen = o.getAttribute ? parseInt(o.getAttribute("maxlength")) : ""; if (onmykeypress.caller.arguments[0].ctrlKey == true) {
if (onmykeypress.caller.arguments[0].which == 118) { if (o.selectionStart < o.selectionEnd) {
var ovalueandclipboarddata = o.value + mygetclipdata();
if (o.getAttribute && (ovalueandclipboarddata.length - o.selectionEnd + o.selectionStart > nMaxLen)) {
if (mygetclipdata().substring(0, o.selectionEnd - o.selectionStart + nMaxLen - o.value.length) != "")
mysetclipdata(mygetclipdata().substring(0, o.selectionEnd - o.selectionStart + nMaxLen - o.value.length));
else
return false;
}
}
else {
var ovalueandclipboarddata = o.value + mygetclipdata();
if (o.getAttribute && ovalueandclipboarddata.length > nMaxLen) {
if (ovalueandclipboarddata.substring(0, nMaxLen - o.value.length) != "")
mysetclipdata(ovalueandclipboarddata.substring(0, nMaxLen - o.value.length));
else
return false;
}
}
return true; }
} if (onmykeypress.caller.arguments[0].which == 0 || onmykeypress.caller.arguments[0].which == 8)
return true;
if (o.value.length >= o.getAttribute("maxlength")) {
if (o.selectionStart < o.selectionEnd)
return true;
if (o.value.length > o.getAttribute("maxlength"))
o.value = o.value.substring(0, o.getAttribute("maxlength"));
return false;
}
else
return true; }
else {
if (document.selection.createRange().text.length > 0)
return true;
if (o.value.length >= o.getAttribute("maxlength"))
return false;
else
return true;
}
}
 
IE8 Firefox 17 Chrome 23
兼容 兼容 兼容
 
 
 
 
 

限制textarea 文本框的长度(收集了几个办法)的更多相关文章

  1. 如何限制textarea文本框的输入字数

    代码实例如下: <!doctype html><html><head><meta charset="UTF-8"><title ...

  2. jQuery实现限制input框 textarea文本框输入字符数量的方法

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  3. Jquery实现 TextArea 文本框根据输入内容自动适应高度

    原文 Jquery实现 TextArea 文本框根据输入内容自动适应高度 在玩微博的时候我们可能会注意到一个细节就是不管是新浪微博还是腾讯微博在转发和评论的时候给你的默认文本框的高度都不会很高,这可能 ...

  4. 【kindeditor】KindEditor获取多个textarea文本框的值并判断非空

    kindeditor官网:http://kindeditor.net/demo.php 如何获取多个KindEditor中textarea文本框的值,方式很多种(带有HTML标签). var intr ...

  5. js限制textarea文本框的文字个数

    现在发微博,那个文本框一般只能输入200字好像,再多就会自动删除,要么是提示字数受限,用Js就可实现本功能.今天带来的这个Js限制表单文本 框文字数量的例子,相信有此方面需要的是个不错的参考.为了便于 ...

  6. html5 textarea 文本框根据输入内容自适应高度

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  7. JS案例 - 可自动伸缩高度的textarea文本框

    文本框的默认现象: textarea如果设置cols和rows来规定textarea的尺寸,那么textarea的默认宽高是这俩属性设置的值,可以通过鼠标拖拽缩放文本框的尺寸. textarea如果设 ...

  8. JS实时检测文本框内容长度

    通过js代码实时监测,文本框内容的变化以及长度,下图是一个实际使用场景. HTML部分: <input id="Text1" type="text" on ...

  9. contenteditable模仿textarea文本框

    contenteditable 属性是 HTML5 中的新属性. 例子:<p contenteditable="true" style=" border:solid ...

随机推荐

  1. 【Python开发】Pycharm下的Anaconda配置

    我的系统是Win 64位的,用的Python 3.5.1 ,最近在学机器学习,用到了Numpy这个科学计算库,网上查了之后,看到很多装Numpy出问题的情况,所以决定装Anaconda,简单一些,并且 ...

  2. eDiary

    多年过去,您经历了BBS.论坛.博客.推特.微博 ...,但在电脑的某个 角落,eDiary始终为你守护发自你内心的声音. eDiary的作用不仅仅在于写日记,您也可以用它来记流水帐.写工作日志, 记 ...

  3. 中级java面试经历

    2018年已经远去,2019年悄然而至.跳槽不仅是为了涨薪,更是为了锻炼自己,提高自己的能力.树挪死,人挪活.在一个公司呆的时间越长,就越老油条,从而失去不断前进的动力.现在下面就主要讲述我这一个月面 ...

  4. 如何用Python制作优美且功能强大的数据可视化图像

    第一个案例 首先开始来绘制你的第一个图表 from pyecharts import Bar '''遇到不懂的问题?Python学习交流群:1004391443满足你的需求,资料都已经上传群文件,可以 ...

  5. vue-cli中跨域问题解决方法

    webpack提供了配置代理的方法解决跨域 1 在vue-cli项目中打开webpack.dev.cof.js,如下 2 打开conifg目录下的index.js,在 proxyTable中进行配置 ...

  6. Entity Framework Core今日所得:避免 IEnumerable 以及 IQueryable 陷阱

    避免 IEnumerable 以及 IQueryable 陷阱: IEnumerable示用Linq会先去数据库查询所有记录,然后再条件查询. IQueryable接口派生自IEnumerable,但 ...

  7. BZOJ1040: [ZJOI2008]骑士(奇环树,DP)

    题目: 1040: [ZJOI2008]骑士 解析: 假设骑士\(u\)讨厌骑士\(v\),我们在\(u\),\(v\)之间连一条边,这样我们就得到了一个奇环树(奇环森林),既然是一颗奇环树,我们就先 ...

  8. jsonserver的安装及启动

    JsonServer 主要的作用就是搭建本地的数据接口,创建json文件,便于调试调用 是一个 Node 模块,运行 Express 服务器,可以指定一个 json 文件作为 api 的数据源 官网: ...

  9. 英语fraunce法兰西

    fraunce  外文词汇,中文翻译为代指法兰西(地名) 中文名:法兰西 外文名:fraunce 目录 释义 Fraunce 读音:英 [frɑ:ns] 美 [fræns] Noun(名词) 1. ...

  10. Jmeter如何测试接口

    现在对测试人员的要求越来越高,不仅仅要做好功能测试,对接口测试的需求也越来越多!所以也越来越多的同学问,怎样才能做好接口测试? 要真正的做好接口测试,并且弄懂如何测试接口,需要从如下几个方面去分析问题 ...