<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>实时提示可输入字符字节数-www.jb200.com</title>
</head>
<script>
/**
* 获取该串真正的字符数,这里一个字符==一个字节
* 暂未考虑超过 16 位字符的处理
*
* @example
* "中华富强".len() 结果:8
* "中国China".len() 结果:9
*/
String.prototype.len = function(){
return this.replace(/[^x00-xff]/g, "**").length;
}
/**
* 获取该串真正的字符数,这里一个字符==一个字节
* 暂未考虑超过 16 位字符的处理
*
* @example
* "中华富强".len() 结果:8
* "中国China".len() 结果:9
* strlen 与 上面的 len 方法 效果一样
*/
function strlen(str){
var len = 0;
for(var i=0;i<str.length;i++){
if (str.charCodeAt(i)>255) {
len += 2;
}else {
len++;
}
}
return len;
}
/**
* 判断传入的字符是否为全角
*
* pChar:字符
* return:true:全角 ,false:半角
*/
function isFull(pChar) {
if ((pChar.charCodeAt(0) > 255)) {
return true;
} else {
return false;
}
}
/**
* 取得指定长度的字符串 (注:半角长度为1,全角长度为2)
*
* pStr:字符串
* pLen:截取长度
* return: 截取后的字符串
*/
function cutString(pStr, pLen) {
var strLen = pStr.length;
var cutString;
var lenCount = 0;
if (strLen <= pLen/2) {
cutString = pStr;
}else {
for(var i = 0; i < strLen ; i++) {
if(isFull(pStr.charAt(i))) {
lenCount += 2;
} else {
lenCount += 1;
}
if (lenCount > pLen) {
cutString = pStr.substring(0, i);
break;
} else if(lenCount == pLen) {
cutString = pStr.substring(0, i + 1);
break;
}
}
}
return cutString;
}
/**
* 点击输入框时判断输入框中是否是默认值,如是默认值则将输入框清空
*/
function click_context_textarea(obj) {
if(obj.value==obj.defaultValue) {
obj.value="";
}
set_alert_context_comment();
return false;
}
/**
* 焦点离开输入框时,判断输入框中是否有录入,如没有录入则将置回默认值
*/
function blur_context_textarea(obj) {
if(obj.value=="") {
objobj.value= obj.defaultValue;
}
set_alert_context_comment();
return false;
}
/**
* 判断输入框的字节数,并更新提示信息
*/
function set_alert_context_comment() {
var maxLen = 30;
var inputNum = document.getElementById("txtContent").value.len();
//var inputNum = strlen(document.getElementById("txtContent").value);
if (inputNum <= maxLen) {
var matchWords = document.getElementById("txtContent").value.length;
document.getElementById("promptInfo").innerHTML = "当前已经输入" + inputNum + "字节," + matchWords + "字符,还可以输入" + (maxLen - inputNum) + "字母,"+(Math.round(((maxLen-inputNum)/2)-0.5))+"汉字";
}
if (inputNum > maxLen) {
document.getElementById("txtContent").value = cutString(document.getElementById("txtContent").value, maxLen); //如果超过预定字节,就截取到预定字节个字节数
}
}
/**
* 页面加载完成,调set_alert_context_comment方法进行提示信息的更新
*/
window.onload=function() {
set_alert_context_comment();
};
</script>
<body>
<div>
<strong>说明:</strong><br>
此实例实现一个输入框的功能,在用户动态输入文字的时候,修改提示"当前已经输入X字节,X字符,还可以输入X字母,X汉字"<br>
onkeyup事件可以支持输入动态更新、拷贝粘贴更新,且可以很好的支持IE、Firefox、Chrome
</div>
<br>
<!--
<textarea id="txtContent" name="txtContent" rows="10" cols="50" onblur="blur_context_textarea(this);" onfocus="click_context_textarea(this);" onpropertychange="set_alert_context_comment();" oninput="set_alert_context_comment();">请在此填写您宝贵的意见</textarea>
-->
<textarea id="txtContent" name="txtContent" rows="10" cols="50" onblur="blur_context_textarea(this);" onfocus="click_context_textarea(this);" onkeyup="set_alert_context_comment()">请在此填写您宝贵的意见</textarea>
<div id="promptInfo"></div>
</body>
</html>
4、JavaScript charAt() 方法,返回指定位置的字符。JavaScript 并没有一种有别于字符串类型的字符数据类型,所以返回的字符是长度为1的字符串。