求助: 一个用js限制用户输入字节个数的问题.

Overriding 2007-03-16 02:22:45
页面上有一个textarea(注意是多行的),现在需要用Js实现下面的功能.

1.只能输入一定字节的字符,比如允许的最大长度是10,那么只能输入10个字母或者5个 汉字(双字节的字符).
2.而且允许用户用退格键,delete键以及其他的非字符键.
3.必须同时支持ie和firefox,太低的版本可以不考虑.
4.用户粘贴的时候也必须保证不会超过允许的最大长度,不能单单考虑用键盘输入.
5.以上功能是基于字节的,不是字符.

搞了老半天没有搞定,网上也没有特别好的资料.
如果有兄弟帮解决了,我可以放非技术分或者捐赠可用分.
谢谢!
...全文
1430 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
mostice 2008-05-23
  • 打赏
  • 举报
回复
CSDN的字符限制,全角的也算作一位啊。。。
KenMu 2007-03-19
  • 打赏
  • 举报
回复
其实应该不只是在onkeyup的时候去检查,在其他很多时候,比如Paste,或者是客户端赋值都需要去检查长度,这时候,就需要给TextBox添加一客户端事件:onPropertyChange,在其属性被该得时候都要去检查。
C#:this.txtStyleSource.Attributes.Add("onPropertyChange","return CheckLength('txtStyleSource',800)");

当然也可以在客户端添加。
龙豆2211 2007-03-16
  • 打赏
  • 举报
回复
Mark
hzsasheng 2007-03-16
  • 打赏
  • 举报
回复
<html>
<head>
<script language="javascript" type="text/javascript">
function isMaxLen(o){
var nMaxLen=o.getAttribute? parseInt(o.getAttribute("maxlength")):"";

var v = o.value;
var d = (v.match(/[\x00-\xff]/g) || "").length; //获取单字节个数
var s = v.length - d; //获取双字节个数

var allLen = d + s * 2 ;

if(o.getAttribute && allLen >nMaxLen){
o.value=o.value.substring(0,nMaxLen/2)
}
}
</Script>
</head>
<body>
<input typ="text" onkeyup="return isMaxLen(this)" ID="txtComment" MaxLength="10" TextMode="MultiLine" Height="90px" />
</body>
</html>
俩定 2007-03-16
  • 打赏
  • 举报
回复
mark
做个标记
cpp2017 2007-03-16
  • 打赏
  • 举报
回复
onkeydown
junsir 2007-03-16
  • 打赏
  • 举报
回复
捕捉键盘和鼠标事件截取
========
如果我按着一个键不松,如何是好。。。
cpp2017 2007-03-16
  • 打赏
  • 举报
回复
捕捉键盘和鼠标事件截取 ========== 同意。 另外,如果把数据库字段改成nvarchar类型就没有这回事了。
孟子E章 2007-03-16
  • 打赏
  • 举报
回复
捕捉键盘和鼠标事件截取
gui0605 2007-03-16
  • 打赏
  • 举报
回复
客户端验证长度?不现实吧...
Overriding 2007-03-16
  • 打赏
  • 举报
回复
多谢hertcloud(·£孙子兵法£·) 和net_lover(【孟子E章】)

似乎所有的方案都是截取字符串的方式,当用户输入一旦达到最大限制就不在接受用户输入是否很难实现.至少汉字输入的时候可能会出现一下输入几个汉字的情况,还是需要截取字符串.

hertcloud 2007-03-16
  • 打赏
  • 举报
回复
:-)
用了孟老大的 函数:)
best8625 2007-03-16
  • 打赏
  • 举报
回复
up
孟子E章 2007-03-16
  • 打赏
  • 举报
回复
JS版获取字符串真实长度和取固定长度的字符串函数
http://www.cnitblog.com/yemoo/archive/2006/07/03/13162.html
孟子E章 2007-03-16
  • 打赏
  • 举报
回复
网上也有很多
http://www.google.com/search?hl=zh-CN&lr=&newwindow=1&q=textarea%E9%99%90%E5%88%B6%E8%BE%93%E5%85%A5%E5%AD%97%E6%95%B0&suggest=0&sa=X&oi=cjkrefinements&ct=result&cd=1
csover8 2007-03-16
  • 打赏
  • 举报
回复
mark
孟子E章 2007-03-16
  • 打赏
  • 举报
回复
客户一定要?你就捕捉那几个事件即可。在事件里判断字符数
关于中文、英文,可以参考
http://blog.csdn.net/net_lover/archive/2002/03/29/6898.aspx
hertcloud 2007-03-16
  • 打赏
  • 举报
回复
又打错了:)
return (str.substring(0,okLen - 1) + " ");

====>>>>

return (str.substring(0,okLen - 1) + "");//不要空格:)
hertcloud 2007-03-16
  • 打赏
  • 举报
回复
return (str.substring(0,okLen - 1) + " ");
//--修改下
return (str.substring(0,okLen - 1) + " ");
xray2005 2007-03-16
  • 打赏
  • 举报
回复
学习ing....
加载更多回复(8)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧