JQuery打造省市下拉框聯(lián)動(dòng)效果
更新時(shí)間:2014年05月18日 17:11:18 作者:
考慮將需要?jiǎng)討B(tài)刷新的內(nèi)容自動(dòng)拼接到前一個(gè)下拉框之后等等,用JQuery實(shí)現(xiàn)比較容易,代碼以省市聯(lián)動(dòng)效果為例實(shí)現(xiàn)
做聯(lián)動(dòng)效果,若是用純JavaScript來(lái)做,往往需要輔助頁(yè)面保存需要刷新的結(jié)果集,然后渲染到原頁(yè)面。考慮將需要?jiǎng)討B(tài)刷新的內(nèi)容自動(dòng)拼接到前一個(gè)下拉框之后,當(dāng)前一個(gè)下拉框onchange后,同級(jí)的后面的下拉框全部清除,然后重新拼接刷新的內(nèi)容。用JQuery實(shí)現(xiàn)比較容易,代碼以省市聯(lián)動(dòng)效果為例實(shí)現(xiàn)。
JSP頁(yè)面代碼如下:
<li id="base">
<p>生源地:</p>
<label>
<select id="provinceCode" name="provinceCode" onchange="refreshCity()">
<option value="">全部</option>
<c:forEach items="${provinceInfoList}" var="provinceInfo">
<option value="${provinceInfo.code}">${provinceInfo.provinceName}</option>
</c:forEach>
</select>
</label>
</li>
JavaScript代碼如下:
function refreshCity(){
if($('#provinceCode').find('option:selected').val() == ""){
$('#provinceCode').parent().nextAll('lable').remove();
return;
}
//省份名稱(chēng)
var provinceName = $('#provinceCode').find('option:selected').text();
provinceName = provinceName.substring(0,provinceName.length-4);
// 發(fā)出Json請(qǐng)求,查詢(xún)子下拉框選項(xiàng)數(shù)據(jù)
$.getJSON("<%=basePath%>baseInfo_getCitiesByProvinceId", {
proviceCode : $('#provinceCode').val()
}, function(data) {
// 如果有子選項(xiàng),則創(chuàng)建子下拉框
if(data != null){
// 刪除下拉框父級(jí)<lable>后的所有同級(jí)<lable>
$('#provinceCode').parent().nextAll('lable').remove();
var childId = "city";
// 判斷是否存在下一級(jí)下拉框 不存在就創(chuàng)建
if($('#'+childId).length == 0){
// 創(chuàng)建一個(gè)<li>并創(chuàng)建一個(gè)<select>添加到id為extra的<ul>中
$("<lable><select id='"+childId+"' name='"+childId+"' ></select></li>").appendTo($('#base'));
}else{
//清空子下拉框內(nèi)容
$('#' + childId).empty();
}
// 遍歷json串,填充子下拉框
$.each(data.city, function(i, item) {
$('#' + childId).append(
"<option value='"+item.code+"'>" + item.nameAndCode
+ "</option>");
});
}
});
}
根據(jù)省份獲取市的代碼如下:
public void getCitiesByProvinceCode(String proviceCode, HttpServletResponse response) throws JsonParseException, JsonMappingException, JSONException, IOException{
ProvinceInfo provinceInfo = this.provinceAndCityInfoService.getProvinceInfoByProperty("code", proviceCode);
List<CityInfo> cityList = this.provinceAndCityInfoService.getCityListByProperty("belongProvinceId", provinceInfo.getId()+"");
// 初始化準(zhǔn)備輸出的Json串
String cityJson = "";
// 遍歷集合,構(gòu)造json串
if (cityList.size() > 0) {
cityJson = "{\"city\":[";
// 拼接查詢(xún)到的子項(xiàng)
for (int i = 0; i < cityList.size(); i++) {
CityInfo city = cityList.get(i);
String temp = "{\"code\":\"" + city.getCode()
+ "\",\"nameAndCode\":\"" + city.getName()+"("+ city.getCode() +")"
+ "\"}";
// 如果是集合中最后一項(xiàng),則拼接結(jié)束符,否則用","隔開(kāi)
if (i == cityList.size() - 1) {
cityJson = cityJson + temp + "]}";
} else {
cityJson = cityJson + temp + ",";
}
}
}
// 設(shè)置輸出的字符集和類(lèi)型并輸出json串
response.setCharacterEncoding("UTF-8");
response.setContentType("json");
response.getWriter().print(cityJson);
}
JSP頁(yè)面代碼如下:
復(fù)制代碼 代碼如下:
<li id="base">
<p>生源地:</p>
<label>
<select id="provinceCode" name="provinceCode" onchange="refreshCity()">
<option value="">全部</option>
<c:forEach items="${provinceInfoList}" var="provinceInfo">
<option value="${provinceInfo.code}">${provinceInfo.provinceName}</option>
</c:forEach>
</select>
</label>
</li>
JavaScript代碼如下:
復(fù)制代碼 代碼如下:
function refreshCity(){
if($('#provinceCode').find('option:selected').val() == ""){
$('#provinceCode').parent().nextAll('lable').remove();
return;
}
//省份名稱(chēng)
var provinceName = $('#provinceCode').find('option:selected').text();
provinceName = provinceName.substring(0,provinceName.length-4);
// 發(fā)出Json請(qǐng)求,查詢(xún)子下拉框選項(xiàng)數(shù)據(jù)
$.getJSON("<%=basePath%>baseInfo_getCitiesByProvinceId", {
proviceCode : $('#provinceCode').val()
}, function(data) {
// 如果有子選項(xiàng),則創(chuàng)建子下拉框
if(data != null){
// 刪除下拉框父級(jí)<lable>后的所有同級(jí)<lable>
$('#provinceCode').parent().nextAll('lable').remove();
var childId = "city";
// 判斷是否存在下一級(jí)下拉框 不存在就創(chuàng)建
if($('#'+childId).length == 0){
// 創(chuàng)建一個(gè)<li>并創(chuàng)建一個(gè)<select>添加到id為extra的<ul>中
$("<lable><select id='"+childId+"' name='"+childId+"' ></select></li>").appendTo($('#base'));
}else{
//清空子下拉框內(nèi)容
$('#' + childId).empty();
}
// 遍歷json串,填充子下拉框
$.each(data.city, function(i, item) {
$('#' + childId).append(
"<option value='"+item.code+"'>" + item.nameAndCode
+ "</option>");
});
}
});
}
根據(jù)省份獲取市的代碼如下:
復(fù)制代碼 代碼如下:
public void getCitiesByProvinceCode(String proviceCode, HttpServletResponse response) throws JsonParseException, JsonMappingException, JSONException, IOException{
ProvinceInfo provinceInfo = this.provinceAndCityInfoService.getProvinceInfoByProperty("code", proviceCode);
List<CityInfo> cityList = this.provinceAndCityInfoService.getCityListByProperty("belongProvinceId", provinceInfo.getId()+"");
// 初始化準(zhǔn)備輸出的Json串
String cityJson = "";
// 遍歷集合,構(gòu)造json串
if (cityList.size() > 0) {
cityJson = "{\"city\":[";
// 拼接查詢(xún)到的子項(xiàng)
for (int i = 0; i < cityList.size(); i++) {
CityInfo city = cityList.get(i);
String temp = "{\"code\":\"" + city.getCode()
+ "\",\"nameAndCode\":\"" + city.getName()+"("+ city.getCode() +")"
+ "\"}";
// 如果是集合中最后一項(xiàng),則拼接結(jié)束符,否則用","隔開(kāi)
if (i == cityList.size() - 1) {
cityJson = cityJson + temp + "]}";
} else {
cityJson = cityJson + temp + ",";
}
}
}
// 設(shè)置輸出的字符集和類(lèi)型并輸出json串
response.setCharacterEncoding("UTF-8");
response.setContentType("json");
response.getWriter().print(cityJson);
}
您可能感興趣的文章:
- 利用jQuery實(shí)現(xiàn)可輸入搜索文字的下拉框
- jquery獲得下拉框值的代碼
- jquery動(dòng)態(tài)加載select下拉框示例代碼
- 基于jquery的網(wǎng)頁(yè)SELECT下拉框美化代碼
- JQuery實(shí)現(xiàn)級(jí)聯(lián)下拉框效果實(shí)例講解
- 基于jquery的無(wú)限級(jí)聯(lián)下拉框js插件
- Jquery實(shí)現(xiàn)顯示和隱藏的4種簡(jiǎn)單方式
- JQuery顯示、隱藏div的幾種方法簡(jiǎn)明總結(jié)
- jQuery控制TR顯示隱藏的幾種方法
- JQuery顯示隱藏頁(yè)面元素的方法總結(jié)
- jQuery設(shè)置下拉框顯示與隱藏效果的方法分析
相關(guān)文章
簡(jiǎn)單的jQuery拖拽排序效果的實(shí)現(xiàn)(增強(qiáng)動(dòng)態(tài))
這篇文章主要介紹了簡(jiǎn)單的jQuery拖拽排序效果的實(shí)現(xiàn)(增強(qiáng)),增強(qiáng)動(dòng)態(tài)增加div效果,代碼簡(jiǎn)單,很容易實(shí)現(xiàn),需要的朋友可以參考下2017-02-02
由點(diǎn)擊頁(yè)面其它地方隱藏div所想到的jQuery的delegate
在網(wǎng)頁(yè)開(kāi)發(fā)的過(guò)程中經(jīng)常遇到的一個(gè)需求就是點(diǎn)擊一div內(nèi)部做某些操作,而點(diǎn)擊頁(yè)面其它地方隱藏該div。比如很多導(dǎo)航菜單,當(dāng)菜單展開(kāi)的時(shí)候,就會(huì)要求點(diǎn)擊頁(yè)面其它非菜單地方,隱藏該菜單2013-08-08
jQuery動(dòng)態(tài)移除和添加背景圖片的方法詳解
這篇文章主要介紹了jQuery動(dòng)態(tài)移除和添加背景圖片的方法,結(jié)合實(shí)例形式分析了jQuery針對(duì)頁(yè)面元素樣式及事件響應(yīng)的動(dòng)態(tài)操作技巧,需要的朋友可以參考下2017-03-03
基于jquery實(shí)現(xiàn)簡(jiǎn)單的手風(fēng)琴特效
這篇文章主要介紹了基于jquery實(shí)現(xiàn)簡(jiǎn)單的手風(fēng)琴特效,需要的朋友可以參考下2015-11-11
JS中Array數(shù)組學(xué)習(xí)總結(jié)
本文主要介紹了JS中Array數(shù)組的相關(guān)知識(shí)。具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-01-01

