此JAVASCRIPT方法还有一个地方需要解决,就是控制不了用户在复制、粘贴的情况下输入。
function
textCounter(field, maxlimit)
{
var length = getStrActualLen(field.value);
// 如果是全部半角的情况下
if (checkHankakuEisuji(field.value))
{
if (length > maxlimit)
{
field.value = field.value.substring( 0 , maxlimit);
}
}
else // 含有全角的情况下 //.replace(/[^\x00-\xff]/g)
{
if (length > maxlimit)
{
var fulllength = 0 ; // 其中全角的长度
var halflength = 0 ; // 其中半角的长度
var newlength = 0 ; // 实际要取的长度
for ( var i = 0 ;i < field.value.length;i ++ )
{
var code = field.value.charCodeAt(i);
if (code < 48 || (code > 57 && code < 65 ) || (code > 90 && code < 97 ) || code > 122 )
{
fulllength = fulllength + 1 ;
}
else
{
halflength = halflength + 1 ;
}
}
newlength = halflength + (fulllength - 1 );
field.value = field.value.substring( 0 , newlength);
}
}
}
之所以要考虑全角半角的情况是因为数据库中的子段是一半角来计算的,英文可以输规定长度,但是汉字就只能输一半的长度,所以。
{
var length = getStrActualLen(field.value);
// 如果是全部半角的情况下
if (checkHankakuEisuji(field.value))
{
if (length > maxlimit)
{
field.value = field.value.substring( 0 , maxlimit);
}
}
else // 含有全角的情况下 //.replace(/[^\x00-\xff]/g)
{
if (length > maxlimit)
{
var fulllength = 0 ; // 其中全角的长度
var halflength = 0 ; // 其中半角的长度
var newlength = 0 ; // 实际要取的长度
for ( var i = 0 ;i < field.value.length;i ++ )
{
var code = field.value.charCodeAt(i);
if (code < 48 || (code > 57 && code < 65 ) || (code > 90 && code < 97 ) || code > 122 )
{
fulllength = fulllength + 1 ;
}
else
{
halflength = halflength + 1 ;
}
}
newlength = halflength + (fulllength - 1 );
field.value = field.value.substring( 0 , newlength);
}
}
}
最后在代码页要添加如下:
this
.Remark.Attributes.Add(
"
onKeyDown
"
,
"
textCounter(this,40);
"
);
this .Remark.Attributes.Add( " onKeyUp " , " textCounter(this,40); " );
this .Remark.Attributes.Add( " onKeyUp " , " textCounter(this,40); " );