这个问题是由于以下2行引起的field.value = field.value.substring(0, maxlimit);
onPropertyChange = "textCounter(txtLimit.words, 10);原因1: JS中对字符串长度的判断是按"字"来的,所以对于"ABC"和"中国人"来说长度都是3,LZ想把中文字符当做2个字符来操作,可又直接使用了substring(0, maxlimit)
原因2: onPropertyChange事件, 这个事件每当你个Property赋值的时候就会被触发
所以当有6个字符时,比如"我是个中国人",第一段长度判定为12(j=12), 可在JS里长度被判定为6(field.value.length=6), 当取值substring(0, maxlimit)的时候, LZ希望取到"我是个中国", 而实际上仍然会取到"我是个中国人", 然后又将"我是个中国人" 赋值给field.value, 这时又触发onPropertyChange事件, 导致无限循环
onPropertyChange = "textCounter(txtLimit.words, 10);原因1: JS中对字符串长度的判断是按"字"来的,所以对于"ABC"和"中国人"来说长度都是3,LZ想把中文字符当做2个字符来操作,可又直接使用了substring(0, maxlimit)
原因2: onPropertyChange事件, 这个事件每当你个Property赋值的时候就会被触发
所以当有6个字符时,比如"我是个中国人",第一段长度判定为12(j=12), 可在JS里长度被判定为6(field.value.length=6), 当取值substring(0, maxlimit)的时候, LZ希望取到"我是个中国", 而实际上仍然会取到"我是个中国人", 然后又将"我是个中国人" 赋值给field.value, 这时又触发onPropertyChange事件, 导致无限循环
解决方案 »
- jquery获得某个元素下所有select的值的问题
- ExtJs的Tree控件如何在节点的单击事件中获取该节点相关的属性?
- b/s框架下, 如何使用AIR调用客户端c++程序
- myEclipse报的诡异的错误,为什么用++和--是有害的?
- 如何让字符到达浏览器边界的时候停下来,(手动实现marquee)
- 访问节点问题 ! ! !
- 下面这个连接用javascript输出该怎么写???
- 关于javascript的表格替换问题(100分求解,分不够在加)
- 如何控制window.showModalDialog()所弹出窗口的大小,位置?
- 百分求教关于javascript正则表达式的问题
- 求ubb里javascript的正则表达式,在线等~~
- 请教一个greybox使用的问题
{
var j = 0;
var i = 0;
var len = field.value.length ;
for(i = 0 ; i < len; i ++)
{
if(field.value.charCodeAt(i)> 255)
{
j += 2;
}
else
{
j++;
} if (j > maxlimit)
{
break;
}
} field.value = field.value.substring(0, i);
}建议1: 不要用document.ElementName.SubElementName.Property这样的形式来定位对象, 这样一旦页面排版发生变化,JS可能就需要改动,推荐用ID来标识每个控件.
建议2: 不要用onPropertyChange, 这个事件太敏感, 而且不能跨浏览器支持
不过我试了.
你的一样会报Stack overflow栈溢出...
function textCounter(field,maxlimit)
{
var j = 0;
var len = field.value.length ;
for(var i = 0 ; i < len ; i ++)
{
if(field.value.substr(i,1).charCodeAt(0)> 255)
{
j += 2;
}
else
{
j++;
}
}
if(j > maxlimit)
{
field.value = field.value.substring(0, i);
}你是要做文字截断吧?那个具体截断位置的时候你不应该用哪个maxlimit
function textCounter(field,maxlimit){
var counts = 0;
var newStr;
for(var i = 0;i < field.length;i ++){
if(txt.substr(i,1).charCodeAt(i)>255){
counts += 2;
}else{
counts += 1;
}
if(counts >= maxlimit){
newStr = field.substring(0,i);
break;
}
}
return newStr;
}这是我写的一个,调试过没问题