<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>part1_4.html</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->

<script>
function register() {

var name = document.myForm.myName.value;
var pwd1 = document.myForm.myPwd1.value;
var pwd2 = document.myForm.myPwd2.value;

if(name == "") {
alert("用户名不能为空");
return false;
} else if((name.length < 4) || (name.length > 16)) {
 alert("用户名长度只能在4至16个字符之间");
return false;
} else if(true) {
for(var i=0; i<name.length; i++) {
var ch = name.charAt(i);
if(!(ch > 'a' && ch < 'z') && !(ch > 'A' && ch < 'Z') && !(ch > '0' && ch < '9') && (ch != '_')) {
alert("用户名只能使用字母,数字和下划线");
return false;
}
}
} else if(pwd1 != pwd2) {
alert("两次输入的密码不相等,请重新输入");
return false;
}

// if(pwd1 != pwd2) {
// alert("两次输入的密码不相等,请重新输入");
// return false;
// }

</script> </head> <body>
<fieldset>
<legend>
注册界面
</legend>
<form action="ok.html" method="post" name="myForm" id="myForm" onsubmit="return register()">
<table>
<tr>
<td>
用户名:
</td>
<td>
<input type="text" name="myName" id="myName">用户名只能是字母,数字或下划线,并且在4到16个字符之间
</td>
</tr>
<tr>
<td>
密码:
</td>
<td>
<input type="password" name="myPwd1" id="myPwd1">密码只能是字母或数字,并且在并且在4到16个字符之间
</td>
</tr>
<tr>
<td>
确认密码:
</td>
<td>
<input type="password" name="myPwd2" id="myPwd2">请再输入一次密码
</td>
</tr>
<tr>
<td>
性别:
</td>
<td></td>
</tr>
<tr>
<td>
电子邮件地址:
</td>
<td></td>
</tr>
<tr>
<td>
出生日期:
</td>
<td></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" name="mySubmit" id="mySubmit" value="同意以下协议条款并提交">
</td>
</tr>
<tr>
<td colspan="2">
<textarea rows="10" cols="50">你好</textarea>
</td>
</tr>
</table>
</form>
</fieldset>
</body>
</html>
注释掉的地方可以正常运行,为什么上面的那个else if就没有效果?

解决方案 »

  1.   

    很明显的最后一个else if前面多了一个}
      

  2.   

    <script>
                function register() {
                
                    var name = document.myForm.myName.value;
                    var pwd1 = document.myForm.myPwd1.value;
                    var pwd2 = document.myForm.myPwd2.value;
                    
                    if(name == "") {一
                        alert("用户名不能为空");
                        return false;
                    }一 else if((name.length < 4) || (name.length > 16)) {二
                         alert("用户名长度只能在4至16个字符之间");
                        return false;    
                    }二 else if(true) {三
                        for(var i=0; i<name.length; i++) {四
                            var ch = name.charAt(i);
                            if(!(ch > 'a' && ch < 'z') && !(ch > 'A' && ch < 'Z') && !(ch > '0' && ch < '9') && (ch != '_')) {
                                alert("用户名只能使用字母,数字和下划线");
                                return false;
                            }四
                        }三
                    }请问这个是哪来的 else if(pwd1 != pwd2) {
                        alert("两次输入的密码不相等,请重新输入");
                        return false;
                    }
            
            //        if(pwd1 != pwd2) {
            //            alert("两次输入的密码不相等,请重新输入");
            //            return false;
            //        }
                } 
            </script>
      

  3.   

    LZ,最后一个else if前面的}不会是整个方法的闭合大括号吧
    这样的没if了能直接写else if?
      

  4.   


    if(!(ch > 'a' && ch < 'z') && !(ch > 'A' && ch < 'Z') && !(ch > '0' && ch < '9') && (ch != '_')) {
      

  5.   

    呵呵,抱歉, 是我看错了.
    这样的话你在后面在加个else看看能运行不
      

  6.   

    楼主的逻辑有些问题
    if(name == "") {
                        alert("用户名不能为空");
                        return false;
                    } else if((name.length < 4) || (name.length > 16)) {
                         alert("用户名长度只能在4至16个字符之间");
                        return false;    
                    } else if(true) {
                        for(var i=0; i<name.length; i++) {
                            var ch = name.charAt(i);
                            if(!(ch > 'a' && ch < 'z') && !(ch > 'A' && ch < 'Z') && !(ch > '0' && ch < '9') && (ch != '_')) {
                                alert("用户名只能使用字母,数字和下划线");
                                return false;
                            }
                        }
                    } else if(pwd1 != pwd2) {
                        alert("两次输入的密码不相等,请重新输入");
                        return false;
                    }
    这里的几个if和esle if条件都是相连的,后面的else if要在前面的条件都不成立的条件下才会运行,其中这里else if(true),如果前面的条件都不成立,就判断到这里了,如果是真则执行语句,这里判断的如果是真,也就是说,只有不是真的时候才会运行后面的esle if条件下的语句,但是前面的条件不成立了,这里肯定是真,也就是else if(true)里面的语句肯定会执行,而如果这里是真,后面的esle if语句就肯定不执行了