郁闷:javascript动态显示textarea中输入的字符长度,超过制定长度要拦截住

i_need_mana 2007-05-11 08:45:36
动态显示textarea中输入的字符长度,超过制定长度要提示,
关键是要阻止新输入的内容,特别是粘贴的字符。
谢谢
...全文
1846 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kong Kong 2011-07-08
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 joegu 的回复:]
<input name= " " type= "text " maxlength= "5 "> 你让它是多少就是多少,多了也写不进。
搞定
[/Quote] 见过SB的,没见过这么SB的。。。
joegu 2007-05-22
  • 打赏
  • 举报
回复
<input name="" type="text" maxlength="5">你让它是多少就是多少,多了也写不进。
搞定
sywj115447 2007-05-22
  • 打赏
  • 举报
回复
你可以去看看创力的留言系统

应该跟你的要求很相付

他那个系统,限制是500字符,跟手机短信类似,输入一个字就会相应的有一个数字显示
安迪 2007-05-22
  • 打赏
  • 举报
回复
那你说用户在你原来的文本内容中间输入新内容的话,也要找出来哪些是用户输入的?
yifuzhiming 2007-05-22
  • 打赏
  • 举报
回复
学习
i_need_mana 2007-05-22
  • 打赏
  • 举报
回复
还是没能解决,up
szsheng 2007-05-17
  • 打赏
  • 举报
回复
<textarea cols="100" rows="5" id="text" length="500"></textarea>
注意到了吗?页面中所有的 textarea 或 input 都可以加上 length属性,此例就是限制为500字的,当然了对粘贴也有用的(如果想超过的字符提示,在PressLength方法中加入相关代码)
具体使用如下:

加入前边如下javascript代码


function limitPaste(object,length)
{
length *= 2;
var tempLength = 0;
if(document.selection)
{
if(document.selection.createRange().parentElement().id == object.id)
{
tempLength = document.selection.createRange().text.len();
}
}
var tempValue = window.clipboardData.getData("Text");
tempLength = object.value.len() + tempValue.len() - tempLength;

if (tempLength > length)
{
tempLength -= length;
var tt="";
for(var i=0;i<tempValue.len()-tempLength;i++)
{
if(tt.len()<(tempValue.len()-tempLength))
tt=tempValue.substr(0,i+1);
else
break;
}
if(tt.len()<=0)
{
window.event.returnValue=false;

}
else
{
tempValue=tt;
window.clipboardData.setData("Text", tempValue);
window.event.returnValue = true;
}
}


}

function PressLength()
{
if(event.srcElement.type=="text" || event.srcElement.type=="textarea" )
{
if(event.srcElement.length!=null)
setMaxLength(event.srcElement,event.srcElement.length);

}
}

function LimitLength()
{

if(event.srcElement.type=="text" || event.srcElement.type=="textarea" )
{
if(event.srcElement.length!=null)
limitPaste(event.srcElement,event.srcElement.length);
}
}

document.documentElement.attachEvent('onkeyup', PressLength);
document.documentElement.attachEvent('onpaste', LimitLength);
JK_10000 2007-05-17
  • 打赏
  • 举报
回复
一个汉字算两个字符
---
改数据库就没必要一个汉字算两个字符:
sqlserver:varchar-->> nvarchar
oracle: varchar2--->> nvarchar2
chouchy 2007-05-17
  • 打赏
  • 举报
回复
<textarea cols="100" rows="5" id="text" onkeyup="limitInput()"></textarea><span id="tip"></span>
<script language="JavaScript">
<!--
var len=10;
var v="";
window.onload=function()
{
document.getElementById("tip").innerText="最多可以输入"+len+"个字符";
}
function limitInput()
{
obj=document.getElementById("text");
var reg=/[\u4E00-\u9FA5]/g;
var len2=obj.value.replace(reg,"??").length;
if(len2>len)
{
alert("你输入了"+len2+"个字符,最多可以输入"+len+"个字符(一个汉字算两个字符)。");
obj.value=v;
}
else
{
v=document.getElementById("text").value;//把内容存入v
document.getElementById("tip").innerText="你输入了"+v.replace(reg,"??").length+"个字符,还可以输入"+(len-v.replace(reg,"xx").length)+"个字符。";
}
}
//-->
</script>
JK_10000 2007-05-17
  • 打赏
  • 举报
回复
Only for IE:

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>New Page 1</title>
</head>

<body>
<textarea maxLength="100" id=aaa style="width:500;height:300;" onbeforedeactivate="return checkMaxLength(this);" >
fds afdsa fdsa fdsa fdsa fdfds afdsa fdsa fdsa fdsa fdfds afdsa fdsa fdsa fdsa fdfds afdsa fdsa fdsa fdsa fdfds afdsa fdsa fdsa fdsa fdfds afdsa fdsa fdsa fdsa fd
</textarea>
<input type=button value="test before submit" onclick=" return checkMaxLength(document.getElementById('aaa'))">
</body>

</html>
<script>
/**
*checkMaxLength.
*JK 2006-11-26
*/
function checkMaxLength(textareaObj,maxLength)
{
if(maxLength == null) maxLength=textareaObj.getAttribute("maxLength");
if(maxLength == null) maxLength=1024;
var currentLength = textareaObj.value.length;
if (currentLength > maxLength) {
alert("The length of your input ("+currentLength+") is larger than the maxLength ("+maxLength+") .");
if(textareaObj.createTextRange){
var textRange=textareaObj.createTextRange();
textRange.moveStart('character',maxLength);
textRange.select();
}
else textareaObj.select();
textareaObj.focus();
return false;
}
return true;
}

</script>
JK_10000 2007-05-17
  • 打赏
  • 举报
回复
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>New Page 1</title>
</head>

<body>
<textarea maxLength="100" id=aaa style="width:500;height:300;">
fds afdsa fdsa fdsa fdsa fdfds afdsa fdsa fdsa fdsa fdfds afdsa fdsa fdsa fdsa fdfds afdsa fdsa fdsa fdsa fdfds afdsa fdsa fdsa fdsa fdfds afdsa fdsa fdsa fdsa fd
</textarea>
<input type=button value="test before submit" onclick=" return checkMaxLength(document.getElementById('aaa'))">
</body>

</html>
<script>
/**
*checkMaxLength.
*JK 2006-11-26
*/
function checkMaxLength(textareaObj,maxLength)
{
if(maxLength == null) maxLength=textareaObj.getAttribute("maxLength");
if(maxLength == null) maxLength=1024;
var currentLength = textareaObj.value.length;
if (currentLength > maxLength) {
alert("The length of your input ("+currentLength+") is larger than the maxLength ("+maxLength+") .");
if(textareaObj.createTextRange){
var textRange=textareaObj.createTextRange();
textRange.moveStart('character',maxLength);
textRange.select();
}
else textareaObj.select();
textareaObj.focus();
return false;
}
return true;
}

</script>
hy_lihuan 2007-05-17
  • 打赏
  • 举报
回复
3。不能只截取前端字符,因为用户有可能是在原文本的前面输入。
不知道什么意思;前面两个可以实现的
i_need_mana 2007-05-17
  • 打赏
  • 举报
回复
这个问题不会是无解吧!
up
Ischema 2007-05-12
  • 打赏
  • 举报
回复
oEvent.preventDefault()适用firefox;
onPropertyChang只适用IE;
onkeypress不能实现完全实时监控!
这个问题讨论过好多次了,像楼主这样更高的即时监控的要求似乎很难实现,
只有在提交后检测!
hhhhhnnnnn66 2007-05-12
  • 打赏
  • 举报
回复
onkeypress事件不是可以吗
产生一个字符,计算一次文本域的长度,当超过长度的时候,IE用return(false)阻止onkeypress就可以,firefox用oEvent.preventDefault()就可以
wangwei0406 2007-05-12
  • 打赏
  • 举报
回复
可不可以这样写,一开始显示可以输入的最大字符数,每当用户输入一个字符,显示可以输入的字符数就减1,这个数字到0了就不可以输入了,这样写可用性会好一点,用户一开始就知道可以输入多少个字符,也不用写多余的提示信息了。参考下面的代码:
function textCounter(field, countfield, maxlimit) {
// 定义函数,传入3个参数,分别为表单区的名字,表单域元素名,字符限制;
if (field.value.length > maxlimit) {
//如果元素区字符数大于最大字符数,按照最大字符数截断;
field.value = field.value.substring(0, maxlimit);
}else{
//在记数区文本框内显示剩余的字符数;
countfield.value = maxlimit - field.value.length;
}
//contentsample.innerHTML = field.value;
}
i_need_mana 2007-05-12
  • 打赏
  • 举报
回复
各位都没明白我的意思,1。我是要动态显示输入的文本长度。2。超出长度拦截并提示。3。不能只截取前端字符,因为用户有可能是在原文本的前面输入。
呵呵,大家再帮帮忙
yixianggao 2007-05-11
  • 打赏
  • 举报
回复
没必要弄那么复杂吧!

首先应该明确指出可输入的字符上限,在提交时用脚本检查即可!

完全没必要弄得太复杂,客户端如果禁用了脚本全白搭,哈

实话实说,LZ 请考虑!
adverse 2007-05-11
  • 打赏
  • 举报
回复
想楼上那样监听onpropertychange这个事件应该是可以.
mingxuan3000 2007-05-11
  • 打赏
  • 举报
回复
<TEXTAREA onpropertychange="c(this)" ></TEXTAREA >

function c(a){
if(a.value.length>5){

a.value=a.value.substr(0,5)
}
}
只简单考虑了下超过5个的字母的粘贴情况
编辑推荐 《精通AngularJS》指出AngularJS诞生于Google,已用于开发多款Google产品。它是一套JavaScript前端框架,用于开发当下流行的数据驱动的单页面Web应用。其核心特性是:MVC、模块化、自动双向数据绑定、语义化标签、依赖注入等。 作者简介 Pawel Kozlowski有15年以上的Web开发经验,接触过多种Web技术、语言和平台。他精通客户端和服务器端编程,并始终在寻找能提高生产率的工具和流程。Pawel是自由和开源软件的坚定支持者,他在AngularJS 社区非常活跃,为AngularJS项目贡献了大量的代码。他也对Angular UI (AngularJS的配套框架)有所贡献,并为AngularJS 提供了Twitter Bootstrap 相关的指令(directives)。不写代码时,Pawel 常在会议与活动上为AngularJS布道。 Peter Bacon Darwin已经积累了20年以上的编程经验,他在.NET发布之前,就已经用它工作了。他还对IronRuby的开发有所贡献。他曾在Avanade和IMGROUP做IT顾问。退休后,自由开发和照顾孩子占用了他大部分的时光。Peter是AngularJS社区的名人。他最近加入了Google的AngularJS团队。他还是Angular UI项目的创始成员。他曾在Devoxx UK和其他活动发表过有关AngularJS的演讲,并开办过AngularJS的培训课程。他希望帮助企业更好地利用AngularJS。 目录 序1 第1章Angular之禅7 11邂逅AngularJS7 熟悉框架8 参与AngularJS项目8 社区8 在线学习资源9 库和扩展9 工具9 Batarang10 Plunker与jsFiddle10 IDE扩展和插件10 12AngularJS速成10 HelloWorld——AngularJS示例10 双向数据绑定12 AngularJS的MVC模式12 鸟瞰13 深入作用域15 视图21 模块与依赖注入26 模块26 协作对象27 注册服务29 模块的生命周期33 模块依赖35 13AngularJS和其他框架38 jQuery与AngularJS39 苹果与橙子40 窥视未来41 14总结41 第2章构建与测试43 21介绍示例应用44 熟悉问题领域44 技术栈45 持久化存储46 MongoLab46 服务器端环境47 第三方JavaScript库48 BootstrapCSS48 22构建系统48 构建系统准则49 自动化所有事情49 尽早报错,清晰报错49 不同的工作流,不同的命令50 构建脚本同样是代码50 工具50 Gruntjs51 测试库与工具51 Jasmine51 Karmarunner52 23组织文件和目录52 根目录52 进入源代码目录54 AngularJS的特定文件54 轻装上路56 深入测试目录57 文件命名约定57 24AngularJS模块和文件57 一个文件,一个模块58 模块内部59 注册provider的不同语法59 声明配置和运行块的语法61 25自动化测试62 单元测试63 剖析Jasmine测试64 测试AngularJS对象65 测试服务65 测试控制器67 Mock对象和异步代码测试68 端对端测试70 日常工作流71 Karmarunner的提示与技巧72 执行测试子集73 调试73 26小结74 第3章与后端服务器通信75 31使用$http进行XHR和JSONP请求75 熟悉数据模型和MongoLabURLs76 $httpAPI快速导览76 配置对象说明77 转换请求数据78 处理HTTP响应79 转换响应数据79 处理同源政策约束79 利用JSONP克服同源政策约束80 JSONP的限制81 利用CORS克服同源政策约束81 服务器端代理83 32promiseAPI与$q84 工作的promise和$q服务85 学习$q服务的基础知识85 promise是第一类JavaScript对象87 聚合回调88 注册回调和承诺的生命周期88 异步动作的链式调用89 关于$q的其他91 AngularJS的$q集成93 33promiseAPI与$http94 34与RESTful端点通信95 $resource服务95 构造级与实例级方法97 $resource创建异步方法100 $resource服务的限制101 使用$http自定

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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