【发布时间】:2013-04-18 12:24:02
【问题描述】:
我知道这几天在 IT 领域一直存在问题,不同机器之间使用不同版本的 IE,但我想知道是否有人可以建议我如何成功制作此代码(这适用于我在 IE 10、FireFox、Chrome 等中的所有表单验证都适用于早期版本的 IE。 我正在测试它的版本是 IE7。
function validate(form){
var p = form.getElementsByTagName("p");
var valid = true;
for(var i = 0; i < p.length; i++){
var inputs = p[i].getElementsByTagName("*");
if(p[i].className == "required" || p[i].className == "required error"){
for(var n = 0; n < inputs.length; n++){
switch(inputs[n].tagName){
case "INPUT":
if(inputs[n].value.trim() == "" || inputs[n].value == null){
if(+navigator.sayswho[1] < 9){
//JavaScript for IE version 8 and below
}
else{
inputs[n].className = inputs[n].className.replace( /(?:^|\s)error(?!\S)/ , "" );
inputs[n].className = inputs[n].className+" error";
p[i].className = "required error";
}
valid = false;
}
break;
case "SELECT":
if(inputs[n].options[inputs[n].selectedIndex].value == 0 || select.value == null){
if(+navigator.sayswho[1] < 9){
//JavaScript for IE version 8 and below
}
else{
inputs[n].className = inputs[n].className.replace( /(?:^|\s)error(?!\S)/ , "" );
inputs[n].className = inputs[n].className+" error";
p[i].className = "required error";
}
valid = false;
}
break;
}
}
}
}
if(valid){
var elements = form.getElementsByTagName("*");
for(var i = 0; i < elements.length; i++){
switch(elements[i].type){
case "submit":
elements[i].disabled = true;
break;
case "reset":
elements[i].disabled = true;
break;
case "button":
elements[i].disabled = true;
break;
}
}
return true;
}
return false;
}
+navigator.sayswho[1] 是我在此处找到的另一个问题的值,它返回一个表示浏览器版本的 int(在本例中为 7)
一个表单域的例子是:
<p class="required">
<span>Required Field</span>
<input type="text" id="username" name="username" class="logon_field" onfocus="clearError(this)" placeholder="Username" autofocus />
</p>
在表单的 onsubmit 属性中使用 validate(this) 调用该方法 提前致谢!
【问题讨论】:
-
什么不起作用?您收到什么错误消息或行为?
-
嗨,Jeremy,自从上传这个问题后,上面的代码已经显示出可以与选择列表一起使用,但是当“text”类型的输入被
标记时,验证只是简单的不执行并且表单无论如何都会提交。尚未显示任何错误消息。谢谢
标签: javascript html internet-explorer backwards-compatibility