在JSP里不能通过javascript的验证,而直接提交了表单
下面是register.jsp代码
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>用户注册</title>
<script language=JavaScript src="script/regcheckdata.js"></script>
</head>
<body>
<form name="form" action="register.jsp" method="get" onSubmit="return checkdata()">
<input type="hidden" name="action" value="register"/>
<table width="750" align="center" border="2">
<tr>
<th colspan="2" align="center">用户注册</th>
</tr>
<tr>
<td>用户名:</td>
<td>
<input type=text name="username" size="30" maxlength="10">
</td>
</tr>
<tr>
<td>密码:</td>
<td>
<input type=password name="password" size="15" maxlength="12">
</td>
</tr>
<tr>
<td>密码确认:</td>
<td>
<input type=password name="password2" size="15" maxlength="12">
</td>
</tr>
<tr>
<td>电话:</td>
<td>
<input type=text name="phone" size="15" maxlength="11">
</td>
</tr>
<tr>
<td>地址:</td>
<td>
<textarea rows="12" cols="80" name="addr" wrap="hard"></textarea>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="提交">
<input type="reset" value="重置">
</td>
</tr>
</table>
</form>
</body>
</html>
下面是regcheckdata.js代码
function checkdata() {
var ssn=form.username.value.toLowerCase();
if(!checkUserName(ssn)) return false;//用户名检查
if(strlen(form.password.value)<6) || strlen(form.password.value)>16) {
alert("\正确的登录密码长度为6-16位,仅可用英文、数字、特殊字符!")
form.password.focus()
return false;
}
if(strlen2(form.password.value)) {
alert("\您的密码中包含了非法字符,仅可用英文、数字、特殊字符!")
form.password.focus()
return false;
}
if(form.password.value == form.username.value) {
alert("\用户名与密码不能相同")
form.password.focus()
return false;
}
if(form.password2.value == "") {
alert("\请输入密码确认!")
form.password2.focus()
return false;
}
if(form.password2.value != form.password.value) {
alert("\两次密码输入不一致!")
form.password.focus();
return false;
}
if(form.phone.value == "") {
alert("\请输入电话!")
form.phone.focus()
return false;
}
if(form.addr.value == "") {
alert("\地址不能为空!")
form.addr.focus()
return false;
}
return true;
}
function checkUserName(ssn) {
if(ssn.length<3 || ssn.length>18) {
alert("\请输入正确的用户名,用户名长度为3-18位!")
form.username.focus()
return false;
}
if(isWhiteWpace(ssn)) {
alert("\请输入正确的用户名,用户名中不能有空格!")
form.username.focus();
return false;
}
if (!isSsnString(ssn)){
alert("\对不起,您选择的用户名不正确或已被占用!用户名\n由a~z的英文字母(不区分大小写)、0~9的数字、点、减\n号或下划线组成,长度为3~18个字符,只能以数字或字母\n开头和结尾,例如:kyzy_001。");
form.username.focus();
return false;
}
document.getElementById("usernameErr").innerHTML = "";
return true;
}
function strlen(str){
var len;
var i;
len = 0;
for (i=0;i<str.length;i++){
if (str.charCodeAt(i)>255) len+=2; else len++;
}
return len;
}
function strlen2(str){
var len;
var i;
len = 0;
for (i=0;i<str.length;i++){
if (str.charCodeAt(i)>255) return true;
}
return false;
}
function isWhiteWpace(s) {
var whitespace = " \t\n\r";
var i;
for (i = 0; i < s.length; i++){
var c = s.charAt(i);
if (whitespace.indexOf(c) >= 0) {
return true;
}
}
return false;
}
function isSsnString(ssn)
{
var re=/^[0-9a-z][\w-.]*[0-9a-z]$/i;
if(re.test(ssn))
return true;
else
return false;
}
function checkssn(gotoURL) {
var ssn=form.username.value.toLowerCase();
if (checkUserName(ssn)){
var open_url = gotoURL + "?username=" + ssn;
window.open(open_url,'','status=0,directories=0,resizable=0,toolbar=0,location=0,scrollbars=0,width=322,height=200');
}
}
[解决办法]
- HTML code
<form id="register" name="register" action="register.jsp" method="post" onSubmit="return checkdata();">
[解决办法]
我说,发贴的大哥,,你这个代码估计不是你自己写的吧。。。
看你下面写的判断也得也不错,,为什么写个代码总是漏洞百出的呢?
function checkdata() {
var ssn=form.username.value.toLowerCase();
//---- 这个写法好像不对吧,,起码也要这样写 document.form.username.value.toLowerCase()吧
checkUserName方法体里面的
document.getElementById("usernameErr").innerHTML = "";
这个id 为usernameErr 的在哪里有?没有会报错的。。。一出错就欧了。。。
后面没有细看了,,自己看看吧。。
[解决办法]
一大版的代码,看了就头 晕了,没反应就用alert()去一步一步调试,或者用工具去调试,看错在那里。要学会自己查错,这才是解决问题的根本方法。