Java+Jquery实现的ajax技术对3级联动下拉框的实现

1、主页面代码:index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<link rel="Stylesheet" href="../css/jquery.autocomplete.css" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
		<meta content="width=device-width" name="viewport" />
		<!-- So that mobile webkit will display zoomed in -->
		<meta content="telephone=no" name="format-detection" />
		<head>
<title>public-housing offer</title>
<!-- Bootstrap core CSS -->
<style type="text/css">
body {
	font-family: 微軟正黑體, 新細明體, Arial;
	color: #333333;
}
/*.style2 {
    font-size: 20px;
}
.remark {
    font-family: 微軟正黑體, Arial, 新細明體;
    text-decoration: none;
    font-size: 14px;
    color: #111111;
    line-height: 60px;
} */
.radio_unselect {
	width: 340px;
	height: 63px;
	border: 2px rgb(158, 159, 161) solid;
	/*border-radius: 10px;*/
	line-height: 50px;
	background-color: white;
	text-align: center;
	font-family: 微軟正黑體, 新細明體, Arial;
	font-size: 18px;
	color: rgb(79, 79, 79);
}

.radio_selected {
	width: 340px;
	height: 63px;
	border: 2px rgb(158, 159, 161) solid;
	/*border-radius: 10px;*/
	line-height: 50px;
	background-color: rgb(177, 177, 177);
	text-align: center;
	font-family: 微軟正黑體, 新細明體, Arial;
	font-size: 18px;
	color: rgb(79, 79, 79);
}

.radio_unselect2 {
	width: 340px;
	height: 88px;
	border: 2px rgb(158, 159, 161) solid;
	/*border-radius: 10px;*/
	line-height: 36px;
	background-color: white;
	text-align: center;
	font-family: 微軟正黑體, 新細明體, Arial;
	font-size: 20px;
	color: rgb(79, 79, 79);
}

.radio_selected2 {
	width: 340px;
	height: 88px;
	border: 2px rgb(158, 159, 161) solid;
	/*border-radius: 10px;*/
	line-height: 36px;
	background-color: rgb(177, 177, 177);
	text-align: center;
	font-family: 微軟正黑體, 新細明體, Arial;
	font-size: 20px;
	color: rgb(79, 79, 79);
}

.radio_unselect3 {
	width: 340px;
	height: 63px;
	border: 2px rgb(158, 159, 161) solid;
	/*border-radius: 10px;*/
	line-height: 28px;
	background-color: white;
	text-align: center;
	font-family: 微軟正黑體, 新細明體, Arial;
	font-size: 18px;
	color: rgb(79, 79, 79);
}

.radio_selected3 {
	width: 340px;
	height: 63px;
	border: 2px rgb(158, 159, 161) solid;
	/*border-radius: 10px;*/
	line-height: 28px;
	background-color: rgb(177, 177, 177);
	text-align: center;
	font-family: 微軟正黑體, 新細明體, Arial;
	font-size: 18px;
	color: rgb(79, 79, 79);
}

.select {
	width: 342px;
	height: 52px;
	margin-right: 10px;
	border: 2px rgb(158, 159, 161) solid;
	line-height: 55px;
	font-size: 20px;
	font-family: 微軟正黑體, 新細明體, Arial;
	padding-left: 9px;
}

.select2 {
	width: 342px;
	height: 52px;
	border: 2px rgb(158, 159, 161) solid;
	line-height: 55px;
	font-size: 20px;
	font-family: 微軟正黑體, 新細明體, Arial;
	padding-left: 9px;
}

.select3 {
	width: 342px;
	height: 52px;
	margin-right: 10px;
	border: 2px rgb(158, 159, 161) solid;
	line-height: 55px;
	font-size: 20px;
	font-family: 微軟正黑體, 新細明體, Arial;
	padding-left: 9px;
}

.textbox {
	width: 665px;
	height: 52px;
	border: 2px rgb(158, 159, 161) solid;
	/*border-radius: 10px;*/
	line-height: 55px;
	font-size: 20px;
	font-family: 微軟正黑體, 新細明體, Arial;
	padding-left: 15px;
	padding-right: 15px;
}

.textbox2 {
	width: 145px;
	height: 37px;
	border: 2px rgb(158, 159, 161) solid;
	font-size: 20px;
	font-family: 微軟正黑體, 新細明體, Arial;
	padding-left: 15px;
	padding-top: 6px;
	padding-bottom: 6px;
}

.textbox3 {
	width: 480px;
	height: 52px;
	border: 2px rgb(158, 159, 161) solid;
	font-size: 20px;
	font-family: 微軟正黑體, 新細明體, Arial;
	padding-left: 15px;
	padding-right: 15px;
}

.tAndc {
	font-family: 微軟正黑體, 新細明體, Arial;
	text-decoration: none;
	font-size: 17px;
	color: rgb(79, 79, 79);
}

.submit {
	border: none;
	/*border-radius: 5px;*/
	width: 90px;
	height: 30px;
	color: white;
	font-size: 14px;
	font-weight: bold;
	/*IE6*/
	FILTER: progid:DXImageTransform.Microsoft.Gradient(gradientType=0,
		startColorStr=rgb(64, 158, 209), endColorStr=rgb(38, 111, 152));
	/*非IE6的其它*/
	background: -moz-linear-gradient(top, rgb(64, 158, 209),
		rgb(38, 111, 152));
	/*非IE6的其它*/
	background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgb(64, 158, 209)),
		to(rgb(38, 111, 152)));

	/* background-color: rgb(64, 158, 209); */
}

.style6 {
	text-align: left;
}

#div1 {
	color: white;
	background-color: rgba(0, 156, 191, 0.73);
	border-radius: 8px;
	width: 191px;
	height: 77px;
	font-size: 40px;
	cursor: pointer;
	margin-right: 30px;
}

#div2 {
	color: white;
	background-color: rgba(0, 156, 191, 0.73);
	border-radius: 8px;
	width: 197px;
	height: 77px;
	font-size: 40px;
	cursor: pointer;
}

#div1.hover {
	background: rgba(0, 156, 191, 1);
}

#div2.hover {
	background: rgba(0, 156, 191, 1);
}
</style>

<script src="../js/jquery-1.2.6.js" type="text/javascript"></script>
<script src="js/validator.js" type="text/javascript"></script>
<script src="js/public_housing.js" type="text/javascript"></script>
<script src="../js/jquery-1.9.1.js" type="text/javascript"></script>
<script src="../js/jquery-migrate-1.1.1.js" type="text/javascript"></script>
<script src="../js/modernizr.js" type="text/javascript"></script>
<script src="../js/jquery-placeholder.js" type="text/javascript"></script>
<script src="../js/jquery.autocomplete.min.js" type="text/javascript"></script>
<script type="text/javascript">
	/* 鼠标移入移出触发事件 */
	window.onload = function() {
		var oDiv1 = document.getElementById("div1");
		var oDiv2 = document.getElementById("div2");
		oDiv1.onmouseover = function() {
			oDiv1.className = "hover"
		};
		oDiv1.onmouseout = function() {
			oDiv1.className = ""
		}
		oDiv2.onmouseover = function() {
			oDiv2.className = "hover"
		};
		oDiv2.onmouseout = function() {
			oDiv2.className = ""
		}
	};
	$(function() {
		$("[id^=customer_]").each(function() {
			$(this).click(function() {
				$("[id^=customer_]").attr("class", "radio_unselect3");
				$(this).attr("class", "radio_selected3");
			});
		});
		$("[id^=call_]").each(function() {
			$(this).click(function() {
				$("[id^=call_]").attr("class", "radio_unselect");
				$(this).attr("class", "radio_selected");
			});
		});
		$("[id^=plan_]").each(function() {
			$(this).click(function() {
				$("[id^=plan_]").attr("class", "radio_unselect2");
				$(this).attr("class", "radio_selected2");
			});
		});

		$(".textbox").each(function() {
			var name = $(this).attr("id");
			var hint = $("#" + name + "_hint").val();
			$(this).val(hint);
			$(this).css("color", "rgb(164,164,164)");
			$(this).focus(function() {
				if ($(this).val() == hint) {
					$(this).val("");
					$(this).css("color", "black");
				}
			});

			$(this).blur(function() {
				if ($(this).val() == "") {
					$(this).val(hint);
					$(this).css("color", "rgb(164,164,164)");
				}
			});
		});

		$(".textbox2").each(function() {
			var name = $(this).attr("id");
			var hint = $("#" + name + "_hint").val();
			$(this).val(hint);
			$(this).css("color", "rgb(164,164,164)");
			$(this).focus(function() {
				if ($(this).val() == hint) {
					$(this).val("");
					$(this).css("color", "black");
				}
			});

			$(this).blur(function() {
				if ($(this).val() == "") {
					$(this).val(hint);
					$(this).css("color", "rgb(164,164,164)");
				}
			});
		});

		$(".textbox3").each(function() {
			var name = $(this).attr("id");
			var hint = $("#" + name + "_hint").val();
			$(this).val(hint);
			$(this).css("color", "rgb(164,164,164)");
			$(this).focus(function() {
				if ($(this).val() == hint) {
					$(this).val("");
					$(this).css("color", "black");
				}
			});

			$(this).blur(function() {
				if ($(this).val() == "") {
					$(this).val(hint);
					$(this).css("color", "rgb(164,164,164)");
				}
			});
		})
	});

	function firstValidate() {
		var name = $("#name").val();
		if (name == "" || name == "姓名 Name *") {
			alert("請填上你的姓名\nPlease insert your name");
			return false;
		}

		var name = $("#mobile").val()
		if (name == "" || name == "聯絡電話號碼 Contact No.*") {
			alert("請填上你的聯絡電話號碼 \nPlease insert your contact no.");
			return false;
		}

		var name = $("#email").val();
		if (name == "" || name == "電郵地址 Email *") {
			alert("請填上你的電郵地址\nPlease insert your Email Address.");
			return false;
		}

		var name = $("#district").val();
		if (name == "0") {
			alert("請選擇安裝地址\nPlease choose your Installation Address");
			return false;
		}

		var name = $("#estate").val();
		if (name == "0") {
			alert("請選擇安裝地址\nPlease choose your Installation Address");
			return false;
		}

		var name = $("#house").val();
		if (name == "0") {
			alert("請選擇安裝地址\nPlease choose your Installation Address");
			return false;
		}

		var name = $("#flat").val();
		if (name == "" || name == "室 Flat") {
			alert("請填上正確安裝地址 \nPlease insert your Installation Address.");
			return false;
		}

		var name = $("#floor").val();
		if (name == "" || name == "樓 Floor") {
			alert("請填上正確安裝地址 \nPlease insert your Installation Address.");
			return false;
		}

		$("[id^=call_]").each(function() {
			if ($(this).hasClass("radio_selected")) {
				$("#call").val($(this).html());
			}
			;
		});

		$("[id^=customer_]").each(function() {
			if ($(this).hasClass("radio_selected3")) {
				var itemId2 = $(this).attr("id");
				var planval2 = $("#" + itemId2 + "_text").val();
				$("#customer").val(planval2);
			}
			;
		});

		$("[id^=plan_]").each(function() {
			if ($(this).hasClass("radio_selected2")) {
				var itemId = $(this).attr("id");
				var planval = $("#" + itemId + "_text").val();
				$("#plan").val(planval);
			}
			;
		});

		var tncFlag = $("#tncAgree2").attr("checked");
		//alert(tncFlag);
		if (tncFlag) {
			$("#tncAgree2_val").val("1");
		} else {
			$("#tncAgree2_val").val("0");
		}
		//alert($("#tncAgree2_val").val());
		$("#submit").click();
	}

	function resetHint() {
		$("#reset").click();
		$("#plan_1").click();
		$("#call_1").click();
		$("#customer1").click();
		$(".textbox").each(function() {
			var name = $(this).attr("id");
			var hint = $("#" + name + "_hint").val();
			$(this).val(hint);
			$(this).css("color", "rgb(164,164,164)");
		});

		$(".textbox2").each(function() {
			var name = $(this).attr("id");
			var hint = $("#" + name + "_hint").val();
			$(this).val(hint);
			$(this).css("color", "rgb(164,164,164)");
		});

		$(".textbox3").each(function() {
			var name = $(this).attr("id");
			var hint = $("#" + name + "_hint").val();
			$(this).val(hint);
			$(this).css("color", "rgb(164,164,164)");
		});
	}
</script>

<!-- <script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
  ga('create', 'UA-36281858-5', 'auto');
  ga('send', 'pageview');
</script> -->
<!--Update at 2016.7.26  -->
<!-- Google Tag Manager -->
<noscript>
	<iframe src="https://www.googletagmanager.com/ns.html?id=GTM-PKWNQ9"
		height="0" width="0" style="display: none; visibility: hidden"></iframe>

</noscript>
<script>
	(function(w, d, s, l, i) {
		w[l] = w[l] || [];
		w[l].push({
			'gtm.start' : new Date().getTime(),
			event : 'gtm.js'
		});
		var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l='
				+ l
				: '';
		j.async = true;
		j.src = '//www.googletagmanager.com/gtm.js?id=' + i + dl;
		f.parentNode.insertBefore(j, f);
	})(window, document, 'script', 'dataLayer', 'GTM-PKWNQ9');
</script>
<!-- End Google Tag Manager -->

		</head>
		<body style="text-align: center">
			<form action="public_housing.jsp" method="post" id="myform"
				name="form1">
				<table border="0" cellpadding="0" cellspacing="0" width="100%"
					bgcolor="#FFFFFF">
					<tr>
						<td align="center"><table border="0" cellpadding="10"
								cellspacing="0" class="table-responsive" width="720"
								bgcolor="#ffffff">
								<img src="images/index.jpg" width="700" class="img-responsive"
									height="379"
									style="display: block; max-width: 100%; height: auto" /></td>
					</tr>
					<tr>
						<td align="center" style="width: 700px">
							<div style="width: 700px;">
								<div
									style="margin-top: 20px; margin-bottom: 20px; height: 60px;">
									<input type="hidden" id="customer" name="customer" /> <input
										type="hidden" id="customer_1_text" name="customer_1_text"
										value="新客戶 NewCustomer" />
									<div class="radio_selected3" id="customer_1"
										value="新客戶 NewCustomer"
										style="float: left; padding: 0; margin: 0;">
										<table width="100%" height="100%"
											style="padding: 0; margin: 0;">
											<tr>
												<td width="*"><b>新客戶</b></td>
											</tr>
											<tr>
												<td style="font-size: 16px;">New Customer</td>
											</tr>
										</table>
									</div>
									<input type="hidden" id="customer_2_text"
										name="customer_2_text" value="現有客戶 Existing Customer" />
									<div class="radio_unselect3" id="customer_2"
										value="現有客戶Existing Customer"
										style="float: right; padding: 0; margin: 0;">
										<table width="100%" height="100%"
											style="padding: 0; margin: 0;">
											<tr>
												<td width="*"><b>現有客戶</b></td>
											</tr>
											<tr>
												<td style="font-size: 16px;">Existing Customer</td>
											</tr>
										</table>
									</div>
								</div>
								<div
									style="margin-top: 20px; margin-bottom: 20px; height: 60px;">
									<input type="hidden" id="call" name="call" />
									<div class="radio_selected" id="call_1" style="float: left">先生Mr.</div>
									<div class="radio_unselect" id="call_2" style="float: right">小姐Miss</div>
								</div>
								<div style="margin-top: 20px; width: 700px;">
									<input type="hidden" id="name_hint" value="姓名 Name *" /> <input
										name="name" placeholder="姓名 Name *" type="text"
										class="textbox" id="name" />
								</div>
								<div style="margin-top: 20px; width: 700px;">
									<input type="hidden" id="mobile_hint"
										value="聯絡電話號碼 Contact No.*" /> <input name="mobile"
										placeholder="聯絡電話號碼 Contact No.*" type="text" class="textbox"
										id="mobile" />
								</div>
								<div style="margin-top: 20px; width: 700px;">
									<input type="hidden" id="email_hint" value="電郵地址 Email *" /> <input
										name="email" placeholder="電郵地址 Email *" type="text"
										class="textbox" id="email" />
								</div>

								<div style="margin-top: 20px; width: 700px">
									<input type="hidden" id="districtHidden" value="null"
										name="districtHidden"></input> <input type="hidden"
										id="estateHidden" value="null" name="estateHidden"></input> <select
										id="district" name="district" child="estate" class="select"
										οnchange="cascadeAjax(window.form1.estate,'bdistrict_zh',this.value,'estate','estate_zh');">
										<option value="0" selected="selected">地區 District</option>
									</select> <select id="estate" name="estate" disabled="disabled"
										child="house" class="select2"
										<span style="background-color: rgb(255, 153, 0);">οnchange="cascadeAjax(window.form1.house,'estate_zh',this.value,'block','block_zh');"></span>
										<option value="0" selected="selected">屋邨Estate /
											屋苑Court</option>
									</select>
								</div>

								<div style="margin-top: 20px; width: 700px">
									<input type="hidden" id="houseHidden" value="null"
										name="houseHidden"></input> <select id="house" name="house"
										disabled="disabled" class="select3"
										οnchange="optionSelect('house','houseHidden')">
										<option value="0" selected="selected">樓宇 House /
											座Block</option>
									</select><input type="hidden" id="flat_hint" value="室 Flat" /> <input
										id="flat" name="flat" placeholder="室 Flat" type="text"
										class="textbox2" />  <input type="hidden"
										id="floor_hint" value="樓 Floor" /> <input type="text"
										class="textbox2" id="floor" name="floor" placeholder="樓 Floor" />
								</div>
							</div>
						</td>
					</tr>
					<tr>
						<td
							style="width: 700px; font-size: 18px; float: left; padding: 10px 0;"
							class="style6"></td>
					</tr>
					<tr>
						<td style="width: 343px;"><input type="hidden" id="plan"
							name="plan" /> <input type="hidden" id="plan_1_text"
							name="plan_1_text" value="24個月200M光纖寬頻  # 平均月費 $99" />
							<div class="radio_selected2" id="plan_1"
								style="float: left; padding: 0; margin: 0;">
								<table width="100%" height="100%" style="padding: 0; margin: 0;">
									<tr>
										<td width="*"><b>24個月200M光纖寬頻</b></td>
									</tr>
									<tr>
										<td style="font-size: 18px;">平均月費 $99</td>
									</tr>
								</table>
							</div> <input type="hidden" id="plan_2_text" name="plan_2_text"
							value="36個月200M光纖寬頻  # 平均月費 $69" />
							<div class="radio_unselect2" id="plan_2"
								style="float: right; padding: 0; margin: 0;">
								<table width="100%" height="100%">
									<tr>
										<td width="*"><b>36個月200M光纖寬頻</b></td>
									</tr>
									<tr>
										<td style="font-size: 18px;">平均月費 $69</td>
									</tr>
									<tr>
										<td></td>
									</tr>
								</table>
							</div></td>
					</tr>

					<tr>
						<td height="3"></td>
					</tr>

					<tr>
						<td style="width: 700px">
							<table>
								<tr>
									<td style="width: 30px;" align="left"><input
										type="checkbox" name="tncAgree1" id="tncAgree1" value="1"
										Style="zoom: 200%; padding: 0; margin: 0;" /></td>
									<td style="text-align: justify" align="left">
										本人同意和記環球電訊有限公司(「和記」)使用本人所提供上述之個人資料,作提供有關電訊服務及客戶服務登記之用。</td>
								</tr>
								<tr>
									<td></td>
									<td align="left" style="text-align: justify">I agree that
										the personal information provided above (“Personal Data”) that
										I have provided can be used by Hutchison Global Communication
										Limited (“HGC”), HGC’s affiliated companies, agents,
										contractors for the purposes of my service provision of the
										related telecommunications services and customer services.</td>
								</tr>
								<tr>
									<td height="5" colspan="2"></td>
								</tr>
								<tr>
									<td align="left"><input type="checkbox" id="tncAgree2"
										Style="zoom: 200%; padding: 0; margin: 0;" /> <input
										type="hidden" id="tncAgree2_val" name="tncAgree2_val"
										value="0" /></td>
									<td align="left" style="text-align: justify">
										和記電話可不論直接或透過其聯營公司、代理及/或商業夥伴,使用本人的個人資料作直接促銷指定之服務及/或產品類別*。</td>
								</tr>
								<tr>
									<td></td>
									<td align="left" style="text-align: justify">HGC may,
										directly or through its affiliated companies, agents and/or
										business partners, use my Personal Data for direct marketing
										of the services and/or products of designated industries*.</td>
								</tr>
							</table>
						</td>
					</tr>
					<tr>
						<td height="5"></td>
					</tr>
					<tr>
						<td style="width: 700px">
							<div align="left" style="text-align: justify">
								*指定行業包括電訊、禮賓服務、鮮花及禮物籃、婚禮籌備服務、個人護理及美容、服飾、超級市場及百貨公司、家居生活、餐飲及食品、酒店及旅遊、娛樂消閑、高端消費產品、電器及電子產品、電子商務及付款平台、媒體、保險、銀行及金融、教育、文儀用品、房地產及物業管理、物流及運輸、社交網絡服務、招聘、慈善及非牟利機構。
							</div>
						</td>
					</tr>
					<tr>
						<td height="5"></td>
					</tr>
					<tr>
						<td style="width: 700px">
							<div align="left" style="text-align: justify">*Designated
								industries include telecommunications, concierge services,
								flowers and hampers, wedding planning services, personal care
								and beauty, fashion and apparel, supermarket and department
								stores, household, catering/ food and beverages, hotels and
								travelling, entertainment and leisure, high-end consumer
								products, electrical and electronic products, e-commerce and
								payment platforms, media, insurance, banking and finance,
								education, stationary and office equipment, real estate and
								property management, logistics and transportation, social
								network services, recruitment, charitable and non-profitmaking
								organizations.</div>
						</td>
					</tr>
					<tr>
						<td align="center" style="width: 700px"><div
								style="margin-top: 40px; width: 700px;">
								<input type="submit" id="submit" name="submit" class="submit"
									style="display: none;" /> <input type="reset" id="reset"
									name="reset" class="submit" style="display: none;" /> <input
									type="button" id="div1" value="提交" οnclick="firstValidate()" />
								<input type="button" id="div2" value="重設" οnclick="resetHint()" />
							</div></td>
					</tr>
					<tr>
						<td height="5"></td>
					</tr>
					<tr>
						<td align="center" style="width: 700px">
							<div align="center" style="text-align: justify; width: 380px">
								如有任何銷售知訊查詢, 請致電1032或聯絡3ichat<br />For sales inquiry, please
								call 1032 or contact 3ichat
							</div>
						</td>
					</tr>
					<tr>
						<td height="40"></td>
					</tr>
					<tr>
						<td style="border: 1px rgb(158, 159, 161) solid; width: 700px">
							<div align="left" style="text-align: justify">
								<h4 align="center">Terms & Conditions Section</h4>
								<ol>
									<li>terms1.......</li>
									<li>terms2.......</li>
									<li>terms3.......</li>
									<li>terms4.......</li>
									<li>terms5.......</li>
									<li>terms6.......</li>
								</ol>
							</div>

						</td>
					</tr>
				</table>
				<tr>
					<td height="40"></td>
				</tr>
				</table>
			</form>
		</body>
		<script language="JavaScript" type="text/javascript">
			//<![CDATA[You should create the validator only after the definition of the HTML form
			var frmvalidator = new Validator("myform");
			frmvalidator.addValidation("name", "req",
					"請填上你的姓名 \nPlease insert your name.");
			frmvalidator.addValidation("email", "maxlen=50",
					"請填寫正確電郵地址\nPlease insert your right Email Address.");
			frmvalidator.addValidation("email", "req",
					"請填上電郵地址\nPlease insert your Email Address");
			frmvalidator.addValidation("email", "email",
					"請填寫正確電郵地址\nPlease insert your right Email Address.");
			frmvalidator.addValidation("mobile", "maxlen=8",
					"請填寫正確聯絡電話號碼\nPlease insert your contact no.");
			frmvalidator.addValidation("mobile", "req",
					"請填上你的聯絡電話號碼\nPlease insert your contact no.");
			frmvalidator.addValidation("mobile", "numeric",
					"請填寫正確聯絡電話號碼 \nPlease insert your contact no.");
			frmvalidator.addValidation("mobile", "first_char",
					"請填寫正確聯絡電話號碼\nPlease insert your contact no. ");
			frmvalidator.addValidation("tncAgree1", "boxcheck", "請同意公司策略");
			//frmvalidator.addValidation("tncAgree2", "boxcheck", "請同意公司策略");
			//]]>
		</script>
</html>

2、js验证代码:

public_housing.js:发送ajax请求,关掉下一级下拉框的使能,并把数据展现出来。

//cascade select
function cascadeAjax(obj, field, value, caseField, caseFieldZh) {
	gobj = obj;
	if (value == 0) {
		removeOldData(gobj);
		disableControl(gobj);
		return;
	}
	var district = optionSelect("district", "districtHidden");
	var estate = optionSelect("estate", "estateHidden");

	$.ajax({
		url : "/RBS/<span style="background-color: rgb(51, 255, 255);">publichousing.do</span>",          //struts1的类似action的配置
		type : "POST",
		data : 'method=cascade' + '&field=' + field + '&value=' + value
				+ '&caseField=' + caseField + '&caseFieldZh=' + caseFieldZh
				+ '&districtEng=' + district + '&estateEng=' + estate,
		success : (function(data, textStatus) {
			if ("success" == jQuery.trim(textStatus)) {
				cascadeSelect(jQuery.trim(data), caseField);
			}
		})
	});
}

function cascadeSelect(txt, field) {
	removeOldData(gobj);
	disableControl(gobj);
	if (txt == "") {
		return;
	} else {
		enableControl(gobj);
	}
	// parse
	var options = txt.split("$$$$");
	for (var j = 0; j < options.length; j++) {
		temp = options[j].split("%%%%");
		gobj.options[gobj.length] = new Option(temp[1], temp[0]);
	}
}

// remove old data
function removeOldData(obj) {
	var soptions = obj.options;
	for (var j = soptions.length - 1; j > 0; j--) {
		if (soptions[j].value != 0) {
			soptions[j] = null;
		}
	}
	if (obj.child != null)
		removeOldData(document.getElementsByName(obj.child)[0]);// recursion
}
function disableControl(obj) {
	if (obj != null) {
		obj.disabled = true;
		disableControl(document.getElementsByName(obj.child)[0]);
		optionSelect("district", "districtHidden");
		optionSelect("estate", "estateHidden");
	}
}      <span style="background-color: rgb(255, 102, 102);">/*获取下拉框选中的项,并把他进行赋值*/</span>
<span style="color:#000000;"><span style="background-color: rgb(51, 204, 0);">function optionSelect(Id, hiddenId) {
	var options = document.getElementById(Id).options;
	for (var i = 0; i < options.length; i++) {
		if (options[i].selected) {
			document.getElementById(hiddenId).value = options[i].text;
			var seletText = document.getElementById(hiddenId).value;
		}
	}
	return seletText;
}</span>
</span>
function enableControl(obj) {
	obj.disabled = false;
}

$(function() {
	cascadeAjax(form1.district, "1", "1", "district", "bdistrict_zh");
});

validator.js:对一些输入框进行合法的js验证。

/*
    -------------------------------------------------------------------------
    JavaScript Form Validator (gen_validatorv4.js)
    Version 4.0
    Copyright (C) 2003-2011 JavaScript-Coder.com. All rights reserved.
    You can freely use this script in your Web pages.
    You may adapt this script for your own needs, provided these opening credit
    lines are kept intact.
        
    The Form validation script is distributed free from JavaScript-Coder.com
    For updates, please visit:
    http://www.javascript-coder.com/html-form/javascript-form-validation.phtml

    Questions & comments please send to form.val (at) javascript-coder.com
    -------------------------------------------------------------------------  
*/

function Validator(frmname)
{
    this.validate_on_killfocus = false;
    this.formobj = document.forms[frmname];
    if (!this.formobj)
    {
        alert("Error: couldnot get Form object " + frmname);
        return;
    }
    if (this.formobj.onsubmit)
    {
        this.formobj.old_onsubmit = this.formobj.onsubmit;
        this.formobj.onsubmit = null;
    }
    else
    {
        this.formobj.old_onsubmit = null;
    }
    this.formobj._sfm_form_name = frmname;

    this.formobj.onsubmit = form_submit_handler;
    this.addValidation = add_validation;

    this.formobj.addnlvalidations = new Array();
    this.addAddnlValidationFunction = add_addnl_vfunction;
    this.formobj.runAddnlValidations = run_addnl_validations;
    this.setAddnlValidationFunction = set_addnl_vfunction;//for backward compatibility


    this.clearAllValidations = clear_all_validations;
    this.focus_disable_validations = false;

    document.error_disp_handler = new sfm_ErrorDisplayHandler();

    this.EnableOnPageErrorDisplay = validator_enable_OPED;
    this.EnableOnPageErrorDisplaySingleBox = validator_enable_OPED_SB;

    this.show_errors_together = false;
    this.EnableMsgsTogether = sfm_enable_show_msgs_together;
    document.set_focus_onerror = true;
    this.EnableFocusOnError = sfm_validator_enable_focus;

    this.formobj.error_display_loc = 'right';
    this.SetMessageDisplayPos = sfm_validator_message_disp_pos;

    this.formobj.DisableValidations = sfm_disable_validations;
    this.formobj.validatorobj = this;

}


function sfm_validator_enable_focus(enable)
{
    document.set_focus_onerror = enable;
}

function add_addnl_vfunction()
{
    var proc =
    {
    };
    proc.func = arguments[0];
    proc.arguments = [];

    for (var i = 1; i < arguments.length; i++)
    {
        proc.arguments.push(arguments[i]);
    }
    this.formobj.addnlvalidations.push(proc);
}

function set_addnl_vfunction(functionname)
{
    if(functionname.constructor == String)
    {
        alert("Pass the function name like this: validator.setAddnlValidationFunction(DoCustomValidation)\n "+
            "rather than passing the function name as string");
        return;
    }
    this.addAddnlValidationFunction(functionname);
}

function run_addnl_validations()
{
    var ret = true;
    for (var f = 0; f < this.addnlvalidations.length; f++)
    {
        var proc = this.addnlvalidations[f];
        var args = proc.arguments || [];
        if (!proc.func.apply(null, args))
        {
            ret = false;
        }
    }
    return ret;
}

function sfm_set_focus(objInput)
{
    if (document.set_focus_onerror)
    {
        if (!objInput.disabled && objInput.type != 'hidden')
        {
            objInput.focus();
        }
    }
}

function sfm_disable_validations()
{
    if (this.old_onsubmit)
    {
        this.onsubmit = this.old_onsubmit;
    }
    else
    {
        this.onsubmit = null;
    }
}

function sfm_enable_show_msgs_together()
{
    this.show_errors_together = true;
    this.formobj.show_errors_together = true;
}

function sfm_validator_message_disp_pos(pos)
{
    this.formobj.error_display_loc = pos;
}

function clear_all_validations()
{
    for (var itr = 0; itr < this.formobj.elements.length; itr++)
    {
        this.formobj.elements[itr].validationset = null;
    }
}

function form_submit_handler()
{
    var bRet = true;
    document.error_disp_handler.clear_msgs();
    for (var itr = 0; itr < this.elements.length; itr++)
    {
        if (this.elements[itr].validationset && !this.elements[itr].validationset.validate())
        {
            bRet = false;
        }
        if (!bRet && !this.show_errors_together)
        {
            break;
        }
    }

    if (this.show_errors_together || bRet && !this.show_errors_together)
    {
        if (!this.runAddnlValidations())
        {
            bRet = false;
        }
    }
    if (!bRet)
    {
        document.error_disp_handler.FinalShowMsg();
        return false;
    }
    return true;
}

function add_validation(itemname, descriptor, errstr)
{
    var condition = null;
    if (arguments.length > 3)
    {
        condition = arguments[3];
    }
    if (!this.formobj)
    {
        alert("Error: The form object is not set properly");
        return;
    } //if
    var itemobj = this.formobj[itemname];

    if (itemobj.length && isNaN(itemobj.selectedIndex))
    //for radio button; don't do for 'select' item
    {
        itemobj = itemobj[0];
    }
    if (!itemobj)
    {
        alert("Error: Couldnot get the input object named: " + itemname);
        return;
    }
    if (true == this.validate_on_killfocus)
    {
        itemobj.onblur = handle_item_on_killfocus;
    }
    if (!itemobj.validationset)
    {
        itemobj.validationset = new ValidationSet(itemobj, this.show_errors_together);
    }
    itemobj.validationset.add(descriptor, errstr, condition);
    itemobj.validatorobj = this;
}

function handle_item_on_killfocus()
{
    if (this.validatorobj.focus_disable_validations == true)
    {
        /*  
        To avoid repeated looping message boxes
        */
        this.validatorobj.focus_disable_validations = false;
        return false;
    }

    if (null != this.validationset)
    {
        document.error_disp_handler.clear_msgs();
        if (false == this.validationset.validate())
        {
            document.error_disp_handler.FinalShowMsg();
            return false;
        }
    }
}

function validator_enable_OPED()
{
    document.error_disp_handler.EnableOnPageDisplay(false);
}

function validator_enable_OPED_SB()
{
    document.error_disp_handler.EnableOnPageDisplay(true);
}

function sfm_ErrorDisplayHandler()
{
    this.msgdisplay = new AlertMsgDisplayer();
    this.EnableOnPageDisplay = edh_EnableOnPageDisplay;
    this.ShowMsg = edh_ShowMsg;
    this.FinalShowMsg = edh_FinalShowMsg;
    this.all_msgs = new Array();
    this.clear_msgs = edh_clear_msgs;
}

function edh_clear_msgs()
{
    this.msgdisplay.clearmsg(this.all_msgs);
    this.all_msgs = new Array();
}

function edh_FinalShowMsg()
{
    if (this.all_msgs.length == 0)
    {
        return;
    }
    this.msgdisplay.showmsg(this.all_msgs);
}

function edh_EnableOnPageDisplay(single_box)
{
    if (true == single_box)
    {
        this.msgdisplay = new SingleBoxErrorDisplay();
    }
    else
    {
        this.msgdisplay = new DivMsgDisplayer();
    }
}

function edh_ShowMsg(msg, input_element)
{
    var objmsg = new Array();
    objmsg["input_element"] = input_element;
    objmsg["msg"] = msg;
    this.all_msgs.push(objmsg);
}

function AlertMsgDisplayer()
{
    this.showmsg = alert_showmsg;
    this.clearmsg = alert_clearmsg;
}

function alert_clearmsg(msgs)
{

}

function alert_showmsg(msgs)
{
    var whole_msg = "";
    var first_elmnt = null;
    for (var m = 0; m < msgs.length; m++)
    {
        if (null == first_elmnt)
        {
            first_elmnt = msgs[m]["input_element"];
        }
        whole_msg += msgs[m]["msg"] + "\n";
    }

    alert(whole_msg);

    if (null != first_elmnt)
    {
        sfm_set_focus(first_elmnt);
    }
}

function sfm_show_error_msg(msg, input_elmt)
{
    document.error_disp_handler.ShowMsg(msg, input_elmt);
}

function SingleBoxErrorDisplay()
{
    this.showmsg = sb_div_showmsg;
    this.clearmsg = sb_div_clearmsg;
}

function sb_div_clearmsg(msgs)
{
    var divname = form_error_div_name(msgs);
    sfm_show_div_msg(divname, "");
}

function sb_div_showmsg(msgs)
{
    var whole_msg = "<ul>\n";
    for (var m = 0; m < msgs.length; m++)
    {
        whole_msg += "<li>" + msgs[m]["msg"] + "</li>\n";
    }
    whole_msg += "</ul>";
    var divname = form_error_div_name(msgs);
    var anc_name = divname + "_loc";
    whole_msg = "<a name='" + anc_name + "' >" + whole_msg;

    sfm_show_div_msg(divname, whole_msg);

    window.location.hash = anc_name;
}

function form_error_div_name(msgs)
{
    var input_element = null;

    for (var m in msgs)
    {
        input_element = msgs[m]["input_element"];
        if (input_element)
        {
            break;
        }
    }

    var divname = "";
    if (input_element)
    {
        divname = input_element.form._sfm_form_name + "_errorloc";
    }

    return divname;
}

function sfm_show_div_msg(divname,msgstring)
{
   if(divname.length<=0) return false;

   if(document.layers)
   {
      divlayer = document.layers[divname];
        if(!divlayer){return;}
      divlayer.document.open();
      divlayer.document.write(msgstring);
      divlayer.document.close();
   }
   else
   if(document.all)
   {
      divlayer = document.all[divname];
        if(!divlayer){return;}
      divlayer.innerHTML=msgstring;
   }
   else
   if(document.getElementById)
   {
      divlayer = document.getElementById(divname);
        if(!divlayer){return;}
      divlayer.innerHTML =msgstring;
   }
   divlayer.style.visibility="visible";   
   return false;
}

function DivMsgDisplayer()
{
    this.showmsg = div_showmsg;
    this.clearmsg = div_clearmsg;
}

function div_clearmsg(msgs)
{
    for (var m in msgs)
    {
        var divname = element_div_name(msgs[m]["input_element"]);
        show_div_msg(divname, "");
    }
}

function element_div_name(input_element)
{
    var divname = input_element.form._sfm_form_name + "_" + input_element.name + "_errorloc";

    divname = divname.replace(/[\[\]]/gi, "");

    return divname;
}

function div_showmsg(msgs)
{
    var whole_msg;
    var first_elmnt = null;
    for (var m in msgs)
    {
        if (null == first_elmnt)
        {
            first_elmnt = msgs[m]["input_element"];
        }
        var divname = element_div_name(msgs[m]["input_element"]);
        show_div_msg(divname, msgs[m]["msg"]);
    }
    if (null != first_elmnt)
    {
        sfm_set_focus(first_elmnt);
    }
}

function show_div_msg(divname, msgstring)
{
    if (divname.length <= 0) return false;

    if (document.layers)
    {
        divlayer = document.layers[divname];
        if (!divlayer)
        {
            return;
        }
        divlayer.document.open();
        divlayer.document.write(msgstring);
        divlayer.document.close();
    }
    else if (document.all)
    {
        divlayer = document.all[divname];
        if (!divlayer)
        {
            return;
        }
        divlayer.innerHTML = msgstring;
    }
    else if (document.getElementById)
    {
        divlayer = document.getElementById(divname);
        if (!divlayer)
        {
            return;
        }
        divlayer.innerHTML = msgstring;
    }
    divlayer.style.visibility = "visible";
}

function ValidationDesc(inputitem, desc, error, condition)
{
    this.desc = desc;
    this.error = error;
    this.itemobj = inputitem;
    this.condition = condition;
    this.validate = vdesc_validate;
}

function vdesc_validate()
{
    if (this.condition != null)
    {
        if (!eval(this.condition))
        {
            return true;
        }
    }
    if (!validateInput(this.desc, this.itemobj, this.error))
    {
        this.itemobj.validatorobj.focus_disable_validations = true;
        sfm_set_focus(this.itemobj);
        return false;
    }

    return true;
}

function ValidationSet(inputitem, msgs_together)
{
    this.vSet = new Array();
    this.add = add_validationdesc;
    this.validate = vset_validate;
    this.itemobj = inputitem;
    this.msgs_together = msgs_together;
}

function add_validationdesc(desc, error, condition)
{
    this.vSet[this.vSet.length] =
    new ValidationDesc(this.itemobj, desc, error, condition);
}

function vset_validate()
{
    var bRet = true;
    for (var itr = 0; itr < this.vSet.length; itr++)
    {
        bRet = bRet && this.vSet[itr].validate();
        if (!bRet && !this.msgs_together)
        {
            break;
        }
    }
    return bRet;
}

/*  checks the validity of an email address entered 
*   returns true or false 
*/
function validateEmail(email)
{
    var splitted = email.match("^(.+)@(.+)$");
    if (splitted == null) return false;
    if (splitted[1] != null)
    {
        var regexp_user = /^\"?[\w-_\.]*\"?$/;
        if (splitted[1].match(regexp_user) == null) return false;
    }
    if (splitted[2] != null)
    {
        var regexp_domain = /^[\w-\.]*\.[A-Za-z]{2,4}$/;
        if (splitted[2].match(regexp_domain) == null)
        {
            var regexp_ip = /^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
            if (splitted[2].match(regexp_ip) == null) return false;
        } // if
        return true;
    }
    return false;
}

function TestComparison(objValue, strCompareElement, strvalidator, strError)
{
    var bRet = true;
    var objCompare = null;
    if (!objValue.form)
    {
        sfm_show_error_msg("Error: No Form object!", objValue);
        return false
    }
    objCompare = objValue.form.elements[strCompareElement];
    if (!objCompare)
    {
        sfm_show_error_msg("Error: Element with name" + strCompareElement + " not found !", objValue);
        return false;
    }

    var objval_value = objValue.value;
    var objcomp_value = objCompare.value;

    if (strvalidator != "eqelmnt" && strvalidator != "neelmnt")
    {
        objval_value = objval_value.replace(/\,/g, "");
        objcomp_value = objcomp_value.replace(/\,/g, "");

        if (isNaN(objval_value))
        {
            sfm_show_error_msg(objValue.name + ": Should be a number ", objValue);
            return false;
        } //if 
        if (isNaN(objcomp_value))
        {
            sfm_show_error_msg(objCompare.name + ": Should be a number ", objCompare);
            return false;
        } //if    
    } //if
    var cmpstr = "";
    switch (strvalidator)
    {
    case "eqelmnt":
        {
            if (objval_value != objcomp_value)
            {
                cmpstr = " should be equal to ";
                bRet = false;
            } //if
            break;
        } //case
    case "ltelmnt":
        {
            if (eval(objval_value) >= eval(objcomp_value))
            {
                cmpstr = " should be less than ";
                bRet = false;
            }
            break;
        } //case
    case "leelmnt":
        {
            if (eval(objval_value) > eval(objcomp_value))
            {
                cmpstr = " should be less than or equal to";
                bRet = false;
            }
            break;
        } //case     
    case "gtelmnt":
        {
            if (eval(objval_value) <= eval(objcomp_value))
            {
                cmpstr = " should be greater than";
                bRet = false;
            }
            break;
        } //case
    case "geelmnt":
        {
            if (eval(objval_value) < eval(objcomp_value))
            {
                cmpstr = " should be greater than or equal to";
                bRet = false;
            }
            break;
        } //case
    case "neelmnt":
        {
            if (objval_value.length > 0 && objcomp_value.length > 0 && objval_value == objcomp_value)
            {
                cmpstr = " should be different from ";
                bRet = false;
            } //if
            break;
        }
    } //switch
    if (bRet == false)
    {
        if (!strError || strError.length == 0)
        {
            strError = objValue.name + cmpstr + objCompare.name;
        } //if
        sfm_show_error_msg(strError, objValue);
    } //if
    return bRet;
}

function TestSelMin(objValue, strMinSel, strError)
{
    var bret = true;
    var objcheck = objValue.form.elements[objValue.name];
    var chkcount = 0;
    if (objcheck.length)
    {
        for (var c = 0; c < objcheck.length; c++)
        {
            if (objcheck[c].checked == "1")
            {
                chkcount++;
            } //if
        } //for
    }
    else
    {
        chkcount = (objcheck.checked == "1") ? 1 : 0;
    }
    var minsel = eval(strMinSel);
    if (chkcount < minsel)
    {
        if (!strError || strError.length == 0)
        {
            strError = "Please Select atleast" + minsel + " check boxes for" + objValue.name;
        } //if                                                               
        sfm_show_error_msg(strError, objValue);
        bret = false;
    }
    return bret;
}

function TestSelMax(objValue, strMaxSel, strError)
{
    var bret = true;
    var objcheck = objValue.form.elements[objValue.name];
    var chkcount = 0;
    if (objcheck.length)
    {
        for (var c = 0; c < objcheck.length; c++)
        {
            if (objcheck[c].checked == "1")
            {
                chkcount++;
            } //if
        } //for
    }
    else
    {
        chkcount = (objcheck.checked == "1") ? 1 : 0;
    }
    var maxsel = eval(strMaxSel);
    if (chkcount > maxsel)
    {
        if (!strError || strError.length == 0)
        {
            strError = "Please Select atmost " + maxsel + " check boxes for" + objValue.name;
        } //if                                                               
        sfm_show_error_msg(strError, objValue);
        bret = false;
    }
    return bret;
}

function IsCheckSelected(objValue, chkValue)
{
    var selected = false;
    var objcheck = objValue.form.elements[objValue.name];
    if (objcheck.length)
    {
        var idxchk = -1;
        for (var c = 0; c < objcheck.length; c++)
        {
            if (objcheck[c].value == chkValue)
            {
                idxchk = c;
                break;
            } //if
        } //for
        if (idxchk >= 0)
        {
            if (objcheck[idxchk].checked == "1")
            {
                selected = true;
            }
        } //if
    }
    else
    {
        if (objValue.checked == "1")
        {
            selected = true;
        } //if
    } //else  
    return selected;
}

function TestDontSelectChk(objValue, chkValue, strError)
{
    var pass = true;
    pass = IsCheckSelected(objValue, chkValue) ? false : true;

    if (pass == false)
    {
        if (!strError || strError.length == 0)
        {
            strError = "Can't Proceed as you selected " + objValue.name;
        } //if          
        sfm_show_error_msg(strError, objValue);

    }
    return pass;
}

function TestShouldSelectChk(objValue, chkValue, strError)
{
    var pass = true;

    pass = IsCheckSelected(objValue, chkValue) ? true : false;

    if (pass == false)
    {
        if (!strError || strError.length == 0)
        {
            strError = "You should select" + objValue.name;
        } //if          
        sfm_show_error_msg(strError, objValue);

    }
    return pass;
}

function TestRequiredInput(objValue, strError)
{
    var ret = true;
    if (VWZ_IsEmpty(objValue.value))
    {
        ret = false;
    } //if 
    else if (objValue.getcal && !objValue.getcal())
    {
        ret = false;
    }

    if (!ret)
    {
        if (!strError || strError.length == 0)
        {
            strError = objValue.name + " : Required Field";
        } //if 
        sfm_show_error_msg(strError, objValue);
    }
    return ret;
}

function TestFileExtension(objValue, cmdvalue, strError)
{
    var ret = false;
    var found = false;

    if (objValue.value.length <= 0)
    { //The 'required' validation is not done here
        return true;
    }

    var extns = cmdvalue.split(";");
    for (var i = 0; i < extns.length; i++)
    {
        ext = objValue.value.substr(objValue.value.length - extns[i].length, extns[i].length);
        ext = ext.toLowerCase();
        if (ext == extns[i])
        {
            found = true;
            break;
        }
    }
    if (!found)
    {
        if (!strError || strError.length == 0)
        {
            strError = objValue.name + " allowed file extensions are: " + cmdvalue;
        } //if 
        sfm_show_error_msg(strError, objValue);
        ret = false;
    }
    else
    {
        ret = true;
    }
    return ret;
}

function TestMaxLen(objValue, strMaxLen, strError)
{
    var ret = true;
    if (eval(objValue.value.length) > eval(strMaxLen))
    {
        if (!strError || strError.length == 0)
        {
            strError = objValue.name + " : " + strMaxLen + " characters maximum ";
        } //if 
        sfm_show_error_msg(strError, objValue);
        ret = false;
    } //if 
    return ret;
}

function TestMinLen(objValue, strMinLen, strError)
{
    var ret = true;
    if (eval(objValue.value.length) < eval(strMinLen))
    {
        if (!strError || strError.length == 0)
        {
            strError = objValue.name + " : " + strMinLen + " characters minimum  ";
        } //if               
        sfm_show_error_msg(strError, objValue);
        ret = false;
    } //if 
    return ret;
}

function TestInputType(objValue, strRegExp, strError, strDefaultError)
{
    var ret = true;

    var charpos = objValue.value.search(strRegExp);
    if (objValue.value.length > 0 && charpos >= 0)
    {
        if (!strError || strError.length == 0)
        {
            strError = strDefaultError;
        } //if 
        sfm_show_error_msg(strError, objValue);
        ret = false;
    } //if 
    return ret;
}

function TestEmail(objValue, strError)
{
    var ret = true;
    if (objValue.value.length > 0 && !validateEmail(objValue.value))
    {
        if (!strError || strError.length == 0)
        {
            strError = objValue.name + ": Enter a valid Email address ";
        } //if                                               
        sfm_show_error_msg(strError, objValue);
        ret = false;
    } //if 
    return ret;
}

function TestLessThan(objValue, strLessThan, strError)
{
    var ret = true;
    var obj_value = objValue.value.replace(/\,/g, "");
    strLessThan = strLessThan.replace(/\,/g, "");

    if (isNaN(obj_value))
    {
        sfm_show_error_msg(objValue.name + ": Should be a number ", objValue);
        ret = false;
    } //if 
    else if (eval(obj_value) >= eval(strLessThan))
    {
        if (!strError || strError.length == 0)
        {
            strError = objValue.name + " : value should be less than " + strLessThan;
        } //if               
        sfm_show_error_msg(strError, objValue);
        ret = false;
    } //if   
    return ret;
}

function TestGreaterThan(objValue, strGreaterThan, strError)
{
    var ret = true;
    var obj_value = objValue.value.replace(/\,/g, "");
    strGreaterThan = strGreaterThan.replace(/\,/g, "");

    if (isNaN(obj_value))
    {
        sfm_show_error_msg(objValue.name + ": Should be a number ", objValue);
        ret = false;
    } //if 
    else if (eval(obj_value) <= eval(strGreaterThan))
    {
        if (!strError || strError.length == 0)
        {
            strError = objValue.name + " : value should be greater than " + strGreaterThan;
        } //if               
        sfm_show_error_msg(strError, objValue);
        ret = false;
    } //if  
    return ret;
}

function TestRegExp(objValue, strRegExp, strError)
{
    var ret = true;
    if (objValue.value.length > 0 && !objValue.value.match(strRegExp))
    {
        if (!strError || strError.length == 0)
        {
            strError = objValue.name + ": Invalid characters found ";
        } //if                                                               
        sfm_show_error_msg(strError, objValue);
        ret = false;
    } //if 
    return ret;
}

function TestDontSelect(objValue, dont_sel_value, strError)
{
    var ret = true;
    if (objValue.value == null)
    {
        sfm_show_error_msg("Error: dontselect command for non-select Item", objValue);
        ret = false;
    }
    else if (objValue.value == dont_sel_value)
    {
        if (!strError || strError.length == 0)
        {
            strError = objValue.name + ": Please Select one option ";
        } //if                                                               
        sfm_show_error_msg(strError, objValue);
        ret = false;
    }
    return ret;
}

function TestSelectOneRadio(objValue, strError)
{
    var objradio = objValue.form.elements[objValue.name];
    var one_selected = false;
    for (var r = 0; r < objradio.length; r++)
    {
        if (objradio[r].checked == "1")
        {
            one_selected = true;
            break;
        }
    }
    if (false == one_selected)
    {
        if (!strError || strError.length == 0)
        {
            strError = "Please select one option from " + objValue.name;
        }
        sfm_show_error_msg(strError, objValue);
    }
    return one_selected;
}

function TestSelectRadio(objValue, cmdvalue, strError, testselect)
{
    var objradio = objValue.form.elements[objValue.name];
    var selected = false;

    for (var r = 0; r < objradio.length; r++)
    {
        if (objradio[r].value == cmdvalue && objradio[r].checked == "1")
        {
            selected = true;
            break;
        }
    }
    if (testselect == true && false == selected || testselect == false && true == selected)
    {
        sfm_show_error_msg(strError, objValue);
        return false;
    }
    return true;
}


//*  Checks each field in a form 


function validateInput(strValidateStr, objValue, strError)
{

    var ret = true;
    var epos = strValidateStr.search("=");
    var command = "";
    var cmdvalue = "";
    if (epos >= 0)
    {
        command = strValidateStr.substring(0, epos);
        cmdvalue = strValidateStr.substr(epos + 1);
    }
    else
    {
    	
        command = strValidateStr;
    }
    
    
    if(command=="select"){
    	if(objValue.value==""){
    		alert(strError);
    		return false;
    	}
    }
    
    switch (command)
    {
    
    case "req":
    case "required":
        {
            ret = TestRequiredInput(objValue, strError)
            break;
        }
    case "maxlength":
    case "maxlen":
        {
            ret = TestMaxLen(objValue, cmdvalue, strError)
            break;
        }
    case "minlength":
    case "minlen":
        {
            ret = TestMinLen(objValue, cmdvalue, strError)
            break;
        }
    case "alnum":
    case "alphanumeric":
        {
            ret = TestInputType(objValue, "[^A-Za-z0-9]", strError, objValue.name + ": Only alpha-numeric characters allowed ");
            break;
        }
    case "alnum_s":
    case "alphanumeric_space":
        {
            ret = TestInputType(objValue, "[^A-Za-z0-9\\s]", strError, objValue.name + ": Only alpha-numeric characters and space allowed ");
            break;
        }
    case "num":
    case "numeric":
    case "dec": 
    case "decimal": 
        {
            if (objValue.value.length > 0 && !objValue.value.match(/^[\-\+]?[\d\,]*\.?[\d]*$/))
            {
                sfm_show_error_msg(strError, objValue);
                ret = false;
            } //if 
            break;
        }
    case "alphabetic":
    case "alpha":
        {
            ret = TestInputType(objValue, "[^A-Za-z]", strError, objValue.name + ": Only alphabetic characters allowed ");
            break;
        }
    case "alphabetic_space":
    case "alpha_s":
        {
            ret = TestInputType(objValue, "[^A-Za-z\\s]", strError, objValue.name + ": Only alphabetic characters and space allowed ");
            break;
        }
    case "email":
        {
            ret = TestEmail(objValue, strError);
            break;
        }
    case "lt":
    case "lessthan":
        {
            ret = TestLessThan(objValue, cmdvalue, strError);
            break;
        }
    case "gt":
    case "greaterthan":
        {
            ret = TestGreaterThan(objValue, cmdvalue, strError);
            break;
        }
    case "regexp":
        {
            ret = TestRegExp(objValue, cmdvalue, strError);
            break;
        }
    case "dontselect":
        {
            ret = TestDontSelect(objValue, cmdvalue, strError)
            break;
        }
    case "dontselectchk":
        {
            ret = TestDontSelectChk(objValue, cmdvalue, strError)
            break;
        }
    case "shouldselchk":
        {
            ret = TestShouldSelectChk(objValue, cmdvalue, strError)
            break;
        }
    case "selmin":
        {
            ret = TestSelMin(objValue, cmdvalue, strError);
            break;
        }
    case "selmax":
        {
            ret = TestSelMax(objValue, cmdvalue, strError);
            break;
        }
    case "selone_radio":
    case "selone":
        {
            ret = TestSelectOneRadio(objValue, strError);
            break;
        }
    case "dontselectradio":
        {
            ret = TestSelectRadio(objValue, cmdvalue, strError, false);
            break;
        }
    case "selectradio":
        {
            ret = TestSelectRadio(objValue, cmdvalue, strError, true);
            break;
        }
        //Comparisons
    case "eqelmnt":
    case "ltelmnt":
    case "leelmnt":
    case "gtelmnt":
    case "geelmnt":
    case "neelmnt":
        {
            return TestComparison(objValue, cmdvalue, command, strError);
            break;
        }
    case "req_file":
        {
            ret = TestRequiredInput(objValue, strError);
            break;
        }
    case "file_extn":
        {
            ret = TestFileExtension(objValue, cmdvalue, strError);
            break;
        }
	case "first_char":
		{
			var firstchar = objValue.value;
            if (firstchar.charAt( 0 ) == '1' || firstchar.charAt( 0 ) == '4' || firstchar.charAt( 0 ) == '7' || firstchar.charAt( 0 ) == '0')
            {
                sfm_show_error_msg(strError, objValue);
                ret = false;
            } //if 
            break;
		}
	case "boxcheck":
		{
			var tnccheckbox = objValue.checked
			if (tnccheckbox == false)
			{
			    sfm_show_error_msg(strError, objValue);
                ret = false;	
			}
		}
    } //switch 
    return ret;
}

function VWZ_IsListItemSelected(listname, value)
{
    for (var i = 0; i < listname.options.length; i++)
    {
        if (listname.options[i].selected == true && listname.options[i].value == value)
        {
            return true;
        }
    }
    return false;
}

function VWZ_IsChecked(objcheck, value)
{
    if (objcheck.length)
    {
        for (var c = 0; c < objcheck.length; c++)
        {
            if (objcheck[c].checked == "1" && objcheck[c].value == value)
            {
                return true;
            }
        }
    }
    else
    {
        if (objcheck.checked == "1")
        {
            return true;
        }
    }
    return false;
}

function sfm_str_trim(strIn)
{
    return strIn.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}

function VWZ_IsEmpty(value)
{
    value = sfm_str_trim(value);
    return (value.length) == 0 ? true : false;
}
/*
	Copyright (C) 2003-2011 JavaScript-Coder.com . All rights reserved.
*/

3、strusts-config.xml的配置:

<struts-config>
<action-mappings>
<action parameter="method" path="/publichousing"
			type="com.hthk.iisz.action.PublicHousingAction">
		</action>
</struts-config>
</action-mappings>

4、Action层的PublicHousingAction.java

package com.hthk.iisz.action;

import java.net.URLDecoder;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.hthk.iisz.service.IPublicHousingService;
import com.hthk.iisz.service.PublicHousingServiceImpl;

public class PublicHousingAction extends ExtBaseAction {

	private Logger log = Logger.getLogger(getClass());
	private IPublicHousingService service = new PublicHousingServiceImpl();

	/** 地区搜寻 级联 */
	public ActionForward cascade(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		try {
			String fieldValue = URLDecoder
					.decode(request.getParameter("value"), "UTF-8")
					.replaceAll("\\$\\;\\$", "&").split("\\%\\%\\%\\%")[0];
			String caseFieldZh = request.getParameter("caseFieldZh");
			String districtCode = URLDecoder.decode(
					request.getParameter("districtEng"), "UTF-8");
			String estateCode = URLDecoder.decode(
					request.getParameter("estateEng"), "UTF-8");

			log.info("fieldValue=" + fieldValue + ", caseFieldZh="
					+ caseFieldZh);

			String options = service.selectBuildingString(caseFieldZh,
					fieldValue, districtCode, estateCode);
			response.getWriter().write(options);
			response.getWriter().flush();
		} catch (Exception e) {
			log.error(this, e);
		}
		return null;
	}

}

5、Service层的PublicHousingServiceImpl.java

package com.hthk.iisz.service;

import java.util.Map;
import java.util.TreeMap;

import com.hthk.iisz.dao.IPublicHousingDao;
import com.hthk.iisz.dao.PublicHousingDaoImpl;
import com.hthk.iisz.util.ValueComparator;

public class PublicHousingServiceImpl implements IPublicHousingService {

	private IPublicHousingDao dao = new PublicHousingDaoImpl();

	@Override
	public String selectBuildingString(String queryField, String value,
			String districtCode, String estateCode) throws Exception {
		TreeMap<String, String> buildingMap = dao.selectBuilding(queryField,
				value, districtCode, estateCode);
		ValueComparator comparator = new ValueComparator(buildingMap);
		TreeMap<String, String> sortedMap = new TreeMap<String, String>(
				comparator);
		sortedMap.putAll(buildingMap);
		StringBuilder sb = new StringBuilder();
		for (Map.Entry<String, String> pair : sortedMap.entrySet()) {
			sb.append("$$$$").append(pair.getKey()).append("%%%%")
					.append(pair.getValue());
		}
		return sb.delete(0, 4).toString();
	}
}


6、Dao层的PublicHousingDaoImpl.java

package com.hthk.iisz.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.TreeMap;
import com.hthk.iisz.util.JdbcConn;

public class PublicHousingDaoImpl implements IPublicHousingDao {

	Connection conn;
	PreparedStatement stmt;
	ResultSet rs;

	private void getConnection() throws SQLException {
		conn = conn == null ? JdbcConn.getConn() : conn;
		if (conn.isClosed())
			conn = JdbcConn.getConn();
	}

	@Override
	public TreeMap<String, String> selectBuilding(String queryField,
			String value, String district_code, String estate_code)
			throws Exception {
		String i = "1";
		StringBuilder sql = new StringBuilder("SELECT");
		if ("bdistrict_zh".equals(queryField)) {
			sql.append(" DISTINCT DISTRICT AS a from PH_LEADFORM_BUILDINGINFO");
		} else if ("estate_zh".equals(queryField)) {
			sql.append(" DISTINCT ESTATE AS a from PH_LEADFORM_BUILDINGINFO where DISTRICT=?");
		} else if ("block_zh".equals(queryField)) {
			sql.append(" DISTINCT BLOCK AS a from PH_LEADFORM_BUILDINGINFO where DISTRICT=? and ESTATE=? ");
		}

		TreeMap<String, String> result = null;
		try {
			result = new TreeMap<String, String>();
			getConnection();
			stmt = conn.prepareStatement(sql.toString());
			if ("bdistrict_zh".equals(queryField)) {
			} else if ("block_zh".equals(queryField)) {
				stmt.setString(1, district_code);
				stmt.setString(2, estate_code);
			} else {
				stmt.setString(1, district_code);
			}
			rs = stmt.executeQuery();
			while (rs.next()) {
				String a = rs.getString("a");
				if (a != null) {
					result.put(i, rs.getString("a"));
					Integer j = (Integer.parseInt(i));
					j++;
					i = Integer.toString(j);
				}
			}
		} catch (SQLException e) {
			throw e;
		} finally {
			if (rs != null)
				rs.close();
			if (stmt != null)
				stmt.close();
			if (conn != null)
				conn.close();
		}
		return result;
	}
}


7、获取下拉框的数据进行邮件的发送:public_housing.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@page import="com.hthk.iisz.service.IDailyRegCountService"%>
<%@page import="java.util.logging.Logger"%>
<%@page import="java.io.FileOutputStream"%>
<%@page import="java.io.OutputStream"%>
<%@page import="java.io.InputStreamReader"%>
<%@page import="java.io.BufferedReader"%>
<%@page import="java.io.FileInputStream"%>
<%@page import="java.io.InputStream"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="com.hthk.iisz.service.DailyRegCountServiceImpl"%>
<%@page import="java.util.Vector"%>
<%@page import="javax.mail.internet.InternetAddress"%>
<%@page import="javax.mail.Session"%>
<%@page import="java.util.Properties"%>
<%@page import="javax.mail.Authenticator"%>
<%@page import="javax.mail.internet.MimeMessage"%>
<%@page import="javax.mail.Message"%>
<%@page import="javax.mail.Multipart"%>
<%@page import="javax.mail.internet.MimeMultipart"%>
<%@page import="javax.mail.internet.MimeBodyPart"%>
<%@page import="java.util.Enumeration"%>
<%@page import="java.io.File"%>
<%@page import="javax.activation.FileDataSource"%>
<%@page import="javax.activation.DataHandler"%>
<%@page import="java.util.Date"%>
<%@page import="javax.mail.Transport"%>
<%@page import="javax.mail.internet.InternetAddress"%>
<%@page import="org.springframework.mail.javamail.JavaMailSenderImpl"%>
<%@page import="org.springframework.mail.javamail.MimeMessageHelper"%>
<%@page import="com.hthk.iisz.util.Constant"%>

<%
	response.setContentType("text/html;charset=UTF-8");
	request.setCharacterEncoding("UTF-8");
	response.setCharacterEncoding("UTF-8");

	boolean sign = false;
	String customer = "";
	String title = "";
	String plan = "";
	String name = "";
	String hkid_no = "";
	String email = "";
	String mobile = "";
	String flat = "";
	String floor = "";
	String block = "";
	String district = "";
	String districtHidden = "";
	String estateHidden = "";
	String houseHidden = "";
	String estate = "";
	String house = "";
	String test = "";
	String tncAgree2 = ""; //已接受促銷" /” 不接受促銷 flag

	if (request.getParameter("customer") != null) {
		customer = request.getParameter("customer");
	}
	if (request.getParameter("call") != null) {
		title = request.getParameter("call");
	}
	if (request.getParameter("plan") != null) {
		plan = request.getParameter("plan");
	}
	if (request.getParameter("name") != null) {
		name = request.getParameter("name");
	}
	if (request.getParameter("hkid_no") != null) {
		hkid_no = request.getParameter("hkid_no");
	}

	if (null != request.getParameter("email")) {
		email = request.getParameter("email");
	}
	if (null != request.getParameter("mobile")) {
		mobile = request.getParameter("mobile");
	}
	if (null != request.getParameter("flat")) {
		flat = request.getParameter("flat");
	}
	if (null != request.getParameter("floor")) {
		floor = request.getParameter("floor");
	}
	if (null != request.getParameter("district")) {
		district = request.getParameter("district");
	}
	if (null != request.getParameter("districtHidden")) {
		districtHidden = request.getParameter("districtHidden");
	}
	if (null != request.getParameter("estateHidden")) {
		estateHidden = request.getParameter("estateHidden");
	}
	if (null != request.getParameter("houseHidden")) {
		houseHidden = request.getParameter("houseHidden");
	}
	if (null != request.getParameter("estate")) {
		estate = request.getParameter("estate");
	}
	if (null != request.getParameter("house")) {
		house = request.getParameter("house");
	}

	if (null != request.getParameter("test")) {
		test = request.getParameter("test");
	}

	if (null != request.getParameter("tncAgree2_val")) {
		if ("1".equals(request.getParameter("tncAgree2_val"))) {
			tncAgree2 = "\n已接受促銷";
		} else {

			tncAgree2 = "\n不接受促銷";
		}
	}

	/* String subject = "慧景軒住戶專享寬頻優惠- Public Housing Offer";
	String content = "\n客戶:" + customer + "\n稱呼:" + title + "\n姓名:"
			+ name + "\n聯絡電話號碼:" + mobile + "\n電郵地址:" + email + "\n地區:"
			+ districtHidden + "\n屋邨:" + estateHidden + "\n樓宇:"
			+ houseHidden + "\n服務計劃:" + plan + "\n " + flat + " 室  "
			+ floor + " 樓  " + tncAgree2; */
	String content = "<br>客戶:" + customer + "<br>稱呼:" + title
			+ "<br>姓名:" + name + "<br>聯絡電話號碼:" + mobile + "<br>電郵地址:"
			+ email + "<br>地區:" + districtHidden + "  屋邨:"
			+ estateHidden + "  樓宇:" + houseHidden + "  " + flat
			+ " 室  " + floor + " 樓  " + "<br>服務計劃:" + plan + "<br> "
			+ tncAgree2;
	out.print(content);
	//System.out.print(content);

	/* JavaMailSenderImpl mailSender = null;
	Properties props = null;
	MimeMessage mimeMessage = null;
	MimeMessageHelper messageHelper = null;
	try {
		mailSender = new JavaMailSenderImpl();
		// UAT
		//mailSender.setHost("1.2.1.1");
		//mailSender.setUsername("support");
		//mailSender.setPassword("mdsadmin");
		// PROD
		mailSender.setHost(Constant.mailHost);
		mailSender.setUsername(Constant.mailUserName);
		mailSender.setPassword(Constant.mailPassWord);

		props = new Properties();
		props.put("mail.smtp.auth", Constant.mailSmtpAuth);
		props.put("mail.smtp.timeout", Constant.mailSmtpTimeout);
		mailSender.setJavaMailProperties(props);

		mimeMessage = mailSender.createMimeMessage();
		messageHelper = new MimeMessageHelper(mimeMessage, true,
				"utf-8");

			String[] mailTo = { "Cong@qq.com" };

		InternetAddress[] to = new InternetAddress[mailTo.length];
		for (int i = 0; i < mailTo.length; i++) {
			to[i] = new InternetAddress(mailTo[i]);
		}

		Logger.getLogger(content);
		messageHelper.setTo(to);
		InternetAddress sender = new InternetAddress(
				"3Home.Admin@qq.com",
				"3Home Public Housing Offer Admin", "UTF-8");

		messageHelper.setFrom(sender);
		messageHelper.setSubject(subject);
		messageHelper.setText(content);
		mailSender.send(mimeMessage);
		sign = true;
	} catch (Exception e) {
		throw e;
	} */

	// increase registration count
	/* IDailyRegCountService service = new DailyRegCountServiceImpl();
	boolean result = service.increaseCount("3智能眼");

	if (sign)
		out.println("<script type='text/javascript'>alert('郵件發送成功! 我們將會有專人聯絡並跟進您的申請!');window.location.replace('leadform.html');</script>");
	else
		out.println("<script type='text/javascript'>alert('郵件發送失敗! 請再試一次!');window.location.replace('leadform.html');</script>"); */
%>






  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现select下拉框的三级联,可以通过AjaxJQuery实现。具体步骤如下: 1.在页面中定义三个select下拉框,并且为它们分别定义id。 ``` <select id="province"></select> <select id="city"></select> <select id="district"></select> ``` 2.编写ajax请求,获取省份数据,填充省份下拉框。 ``` $.ajax({ url: "getProvinceList", type: "GET", dataType: "json", success: function(data){ var options = "<option value=''>--请选择--</option>"; for(var i=0; i<data.length; i++){ options += "<option value='" + data[i].id + "'>" + data[i].name + "</option>"; } $("#province").html(options); } }); ``` 3.为省份下拉框绑定change事件,当选择省份时,发送ajax请求获取该省份的城市数据,填充城市下拉框。 ``` $("#province").change(function(){ var provinceId = $(this).val(); $.ajax({ url: "getCityList", type: "GET", dataType: "json", data: {"provinceId":provinceId}, success: function(data){ var options = "<option value=''>--请选择--</option>"; for(var i=0; i<data.length; i++){ options += "<option value='" + data[i].id + "'>" + data[i].name + "</option>"; } $("#city").html(options); } }); }); ``` 4.为城市下拉框绑定change事件,当选择城市时,发送ajax请求获取该城市的区/县数据,填充区/县下拉框。 ``` $("#city").change(function(){ var cityId = $(this).val(); $.ajax({ url: "getDistrictList", type: "GET", dataType: "json", data: {"cityId":cityId}, success: function(data){ var options = "<option value=''>--请选择--</option>"; for(var i=0; i<data.length; i++){ options += "<option value='" + data[i].id + "'>" + data[i].name + "</option>"; } $("#district").html(options); } }); }); ``` 以上就是基于AjaxJQuery实现select下拉框级联的步骤。需要注意的是,需要编写后台代码来获取省份、城市、区/县的数据,并返回给前台。另外,需要在页面中引入JQuery库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值