写了一个提示输入多少字符的js。 但是ie下有问题。 ff没有问题。大家帮个忙看看。

reelcol 2008-07-25 07:35:20

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>test</title>
</head>
<body>
<script src="/test.js" type="text/javascript"></script>
<form name="form1" method="post" action="index.php">
<table >
<tr>
<td >语言1:</td>
<td >
<input text="source1" value="English"/>
</td>
</tr>
<tr>
<td >语言2:</td>
<td >
<input text="source2" value="Chinese"/>
</td>
</tr>
<tr>
<td class="label"> </td>
<td class="field">
<div id="remand">
你已输入
<input id=numOfword name=numOfword type=text value="0" size=5 maxlength=5 readonly>

</div>
</td>
</tr>
<tr>
<td class="label">内容:</td>
<td class="field"><textarea name="content" cols="40" rows="20" onkeyup="textCounter(this.form.content,this.form.numOfword);" id="content"></textarea></td>
</tr>


<tr>
<td class="field" align="center" colspan="2">
<div class="control">
<input type="submit" value='submit'></input>   
</div>
</td>
</tr>
</table>
</form>
</body>
</html>



function textCounter(theField,theCharCounter)
{

var strTemp = "";
var reg = "";
var osel1 = document.getElementById("source1");

if(osel1.value=='Chinese'){
reg=/[\u4E00-\u9FA5]/g;
}else if(osel1.value=='English'){
reg=/[a-zA-Z]/g;
}else{
reg="~!@#$%^&*()_+|`-=\{}[]:\";\<>?,./";
}

//这里打印的都是 reg=/[a-zA-Z]/g;
var strCharCounter0 = 0;

for (var i=0; i < theField.value.length ; i++)
{
var strChar = theField.value.substring(i, i + 1);
//alert("loop:"+ theField.value.length+ "strChar:"+strChar);//这里只要一输入一个字母, 就不停的弹出这个对话框。
if(reg.test(strChar)){
strCharCounter0 = strCharCounter0+1;
}else{
//alert("no");
}
}
theCharCounter.value = strCharCounter0;

}


问题是在ff下可以, 语言1是中文时, 输入英文就不计算。 语言1是英文时, 输入中文就不计算。

但是在ie下, 第一次输入一个字母, 计算, 再输入一个字母, 就不计算了,然后再输入一个字母, 又可以计算了。
也就是说,输入2个才strCharCounter0+1

而且, ie下只要一点击这个文本框输入一个字母后就不停的发生onkeyup事件。 就是不停的调用textCounter方法。

朋友们帮我下。 谢谢。
...全文
65 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
MyTools_Studio 2008-07-25
  • 打赏
  • 举报
回复
因为你在这使用了g匹配模式,第一次匹配成功后,lastIndex没有重置,造成第二次匹配失败
然后lastIndex被重置,这样计数交替进行...

把你原来的g匹配模式去掉就可以了.


<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>test</title>
</head>
<body>
<script type="text/javascript">
function $(id){
return document.getElementById(id);
}

function textCounter(theField,theCharCounter)
{

var strTemp = "";
var reg = "";
var osel1 = document.getElementById("source1");

if(osel1.value=='Chinese'){
reg=/[\u4E00-\u9FA5]/;
}else if(osel1.value=='English'){
reg=/[a-zA-Z]/;
}else{
reg="~!@#$%^&*()_+|`-=\{}[]:\";\<>?,./";
}

//这里打印的都是 reg=/[a-zA-Z]/g;
var strCharCounter0 = 0;

for (var i=0; i < theField.value.length ; i++)
{
var strChar = theField.value.substring(i, i + 1);
//alert("loop:"+ theField.value.length+ "strChar:"+strChar);//这里只要一输入一个字母, 就不停的弹出这个对话框。
if(reg.test(strChar)){
strCharCounter0 = strCharCounter0+1;
}else{
//alert("no");
}
}
theCharCounter.value = strCharCounter0;

}
</script>
<form name="form1" method="post" action="index.php">
<table >
<tr>
<td >语言1:</td>
<td >
<input text="source1" id="source1" value="English"/>
</td>
</tr>
<tr>
<td >语言2:</td>
<td >
<input text="source2" value="Chinese"/>
</td>
</tr>
<tr>
<td class="label"> </td>
<td class="field">
<div id="remand">
你已输入
<input id=numOfword name=numOfword type=text value="0" size=5 maxlength=5 readonly>

</div>
</td>
</tr>
<tr>
<td class="label">内容:</td>
<td class="field"><textarea name="content" cols="40" rows="20" onkeyup="textCounter($('content'),$('numOfword'));" id="content"></textarea></td>
</tr>


<tr>
<td class="field" align="center" colspan="2">
<div class="control">
<input type="submit" value='submit'></input>   
</div>
</td>
</tr>
</table>
</form>
</body>
</html>

87,901

社区成员

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

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