我这样写在IE可以获取焦点,在chrome和火狐浏览器上获取不到焦点。问题出在哪里?

<body>
<form name="frm" action="reg.php" method="post" >
用户名称:<input type="text" name="username" value=""/><span></span><br /><br />
用户年龄: <input type="text" name="age" value=""/><span></span><br /><br />
用户email:<input type="text" name="email" value=""/><span></span><br /><br />
用户地址: <input type="text" name="address" value=""/><span></span><br /><br />

<input type="submit" name="dosubmit" value="注册"/>
</form>
</body>
//获取下一个节点
function nextnode(obj){
var next=obj.nextSibling;

while(next.nodeName!='SPAN'){
next=next.nextSibling;
}
return next;
}
//获取name对像
var name=document.getElementsByName("username")[0];
var namespan=nextnode(name);
//获取焦点的时候做什么
name.onfocus= function (){
namespan.innerText="请输入用户名在4到个8之间的字符串";
namespan.className="normal";

}
最新回答
清风未央

2024-09-12 00:05:03

这是属性兼容问题导致的错误。
在IE和FireFox浏览器中,DOM的nextSibling方法的使用存在部分差异:
1. 在FireFox中,html标记中空行和换行会被当做节点来处理,所以会出现startNode.nextSibling取不到目标节点的情况,得到的元素反而是undefined或是nodeType为text的节点;
2.解决方法是:判断startNode.nextSibling的nodeType类型:
if(startNode.nextSibling.nodeType==3)
{
brotherNode=startNode.nextSibling.nextSibling; //如果浏览器是FireFox

}
else
{
brotherNode=startNode.nextSibling; //如果浏览器是IE

}