jQuery技术是js技术的一个框架,可以利用它强大的功能动态显示一些控件.下面是一个非常有意思和实用的情境,对于巩固jQuery技术十分有用,我们也可以充分体会到其强大之处!
情景假设:现有一个页面,
1.要求先加载所有省份的复选框(其中包含一个*的checkbox,当选择此项时,表明不特指某个省份,将加载所有城市).如果勾选或取消勾选某一省份的复选框时,会加载或去除对应的城市复选框;
同时,会显示已选择的省份。
2.勾选或取消勾选某一城市的复选框时,会显示已选择的城市.
需要注意的问题:
1.如果已经选择了某一特定省份时,并不允许再选择*,因为逻辑上并不成立;同理,如果事先选择*时,再选择某一省份也是不允许的.除非取消勾选.(即*和特定省份不能同时选中)
2.根据省份"过滤"相应城市,是为了避免使用ajax技术把省份ID传给后台引起交互.
3.<s:iterator/>标签在js中的运用.
后台数据库肯定有获取省份列表和城市列表的方法.table_province含有id,name字段(如果id=-1 对应*);而table_city含有id,name,parentId字段(parentId对应该城市所在省份的id)
html页面:
<table width="70%" border="0" cellpadding="2" cellspacing="1" class="tb_input">
<tr >
<td nowrap="nowrap" class="td_title">选择省份:<font color="red">*</font></td>
<td colspan="3">
<div id="div_provIds">
<ul id="provIds">
</ul>
</div>
</td>
</tr>
<tr>
<td nowrap="nowrap" class="td_title" valign="top" >选择地市</td>
<td nowrap="nowrap" colspan="3">
<div id="div_city">
<ul id="notFeeCityIds">
</ul>
</div>
</td>
</tr>
<tr ><td nowrap="nowrap" class="td_title">已选择的省份:<font color="red">*</font></td>
<td nowrap="nowrap" colspan="3" >
<div id="div_prv">
<ul id="feeprovIds">
</ul>
</div>
</td>
</tr>
<tr ><td nowrap="nowrap" class="td_title">已选择的城市:<font color="red">*</font></td>
<td nowrap="nowrap" colspan="3">
<div id="div_city">
<ul id="feecityIds">
</ul>
</div>
<!-- <textarea id="city" name="cpServiceAreaVO.city" cols="40" rows="5" ><s:property value="cpServiceAreaVO.city"/>,</textarea>-->
</td>
</tr>
</table>
获得省份列表和城市列表的js:
//省份列表
var provList = new Array();
<s:iterator value="#Policy.provinceList" >
var str = new Array();
str.push('<s:property value="id" />');
str.push('<s:property value="name"/>');
provList.push(str);
</s:iterator>
//城市列表
var cityList = new Array();
<s:iterator value="Policy.cityList" >
var str = new Array();
str.push('<s:property value="id" />');
str.push('<s:property value="name" />');
str.push('<s:property value="parentId" />');
cityList.push(str);
</s:iterator>
加载省份复选框列表的js:
setProv();
function setProv() {
var provId = 0;
var provName = '';
for(var i=0; i<provList.length; i++) {
provId = provList[i][0];
provName = provList[i][1];
jQuery("#provIds").append("<li><input type='checkbox' name='prov' id='prov'"+provId+" value='"+provName+" onclick=filterCity("+provId+")'/> <span id='provName"+provId+"'>"+provName+"</span></li>");
}
}
根据省份过滤出相应城市,并组成复选框控件列表:
function filterCity(provId) {//注意checkbox的onclick事件包括"点击选中"和"点击取消选中"两种状态
//step1.处理显示对应城市
if(provId != -1) {//没有选择*
if(jQuery("#provId-1").attr("checked") == true) {//说明是在在*选中的情况下再选择某一具体省份的
alert("已选择(*),不需要设置具体省份!");
jQuery("#provId"+provId).attr("checked").remove();
}else{//说明之前选择的就不是*,而是第一次或再一次选择某一具体省份
for(var i=0; i<cityList.length; i++) {//遍历城市的处理
if(cityList[i][2] == provId) {//找出所选省份对应的城市
var cityId = cityList[i][0];
var cityName = cityList[i][1];
var parentId = cityList[i][2];
if(jQuery("#provId"+provId).attr("checked") == true) {//选中状态
jQuery("#notFeeCityIds").append("<li><input type='checkbox' id='cityId"+cityId+"' value='"+cityId+"' name='cityId' onclick='changeCity("+cityId+")'><span id='cityName"+cityId+"'>"+cityName+"</span></li>");
}else{//取消勾选
jQuery("#cityId"+cityId)remove();
}
}
}
}
}else if(provId == -1) {//选择了*
var provPackagebox = document.getElementsByName("prov");
for(var i=0; i<provPackagebox.length; i++) {
if(provPackagebox[i].checked == true) {//说明是在具体省份已选中的情况下选择*的(provId=-1)
alert("已选择具体省份,不能再设置(*)");
jQuery("provId-1").attr("checked").remove();
break;//一旦发现有选中的具体省份,就跳出循环
}
}
for(var i=0; i<cityList; i++) {
if(cityList[i][2] == provId) {
var cityId = cityList[i][0];
var cityName = cityList[i][1];
var parentId = cityList[i][2];
if(jQuery("#provId"+provId).attr("checked") == true) {//选中状态
jQuery("#notFeeCityIds").append("<li><input type='checkbox' id='cityId"+cityId+"' value='"+cityId+"' name='cityId' onclick='changeCity("+cityId+")'><span id='cityName"+cityId+"'>"+cityName+"</span></li>");
}else{//取消勾选
jQuery("#cityId"+cityId).remove();
}
}
}
}
//step2.处理显示[已选省份]
if(jQuery("#provId"+provId).attr("checked") == true) {
var provTxt = jQuery("#provName"+provId).text();//获取已选择省份的span中的值
jQuery("#feeProvIds").append("<li id='li_provId"+provId+"'><span id='show_provName"+provId+"' >"+provTxt+"</span></li>");
}else{
jQuery("#li_provId"+provId).remove();
}
}
根据所选城市与否,显示出所选择的城市的js:
function changeCity(cityId) {
if(jQuery("#cityId"+cityId).attr("checked") == true) {
var cityTxt = jQuery("#cityName"+cityId).text();
jQuery("#feeCityIds").append("<li id='li_cityId"+cityId+"'><span id='show_cityName"+cityId+"'>"++"</span></li>");
}else{
jQuery("#li_cityId"+cityId).remove();
}
}
特别注意:
1.如果要将所选择的城市和省份的值提交到后台,建议在显示所选省份和城市的li中间加一个形如<input type='hidden' id='"+cityId+"' name='XXXVO.city' value='"+setcity+"' />的隐藏域.
2.checkbox的value值只是被后台根据name来进行提交的,并不用于显示出来,所以需加一个span控件显示.
分享到:
相关推荐
《jQuery城市选择插件——lazyload-min.js》 在网页开发中,为了提供用户友好的交互体验,常常需要实现一种功能:动态加载的城市选择插件。这种插件可以帮助用户快速、方便地选择他们所在的省份和城市,从而提高...
这种效果常用于地址选择,用户在选择省份时,下拉框中的城市选项会根据所选省份动态更新。这既提高了用户体验,也减少了用户输入的负担。现在,让我们一起学习如何使用jQuery来实现这个功能。 首先,确保你的页面...
JavaScript/jQuery将解析这个JSON对象,并根据用户选择的省份,选取相应的城市列表。 5. **DOM操作**:使用jQuery,我们可以方便地操作DOM元素,例如 `.append()` 方法用于向DOM树添加新的元素,`.empty()` 清空...
而jQuery城市级联插件则是针对网页中常见的一种交互需求——级联选择,例如选择国家后自动加载对应的省份,再选择省份后加载对应的城市——而设计的工具。 这个插件的核心功能是实现级联下拉菜单,通过联动的方式...
这个主题——"jQuery实现全国省市区城市三级联动代码",主要涉及的是如何利用jQuery库来动态地处理省份、城市、区县这三个级别的数据联动,以实现用户在选择一个级别后,其他级别会自动更新其可选项的功能。...
在网页开发中,经常需要实现省市区城市选择的功能,这种功能通常涉及到三级联动的效果,即选择一个省份后,市、区会根据所选省份自动更新。jQuery作为一款轻量级的JavaScript库,提供了丰富的API和插件,使得实现这...
省市区联动,顾名思义,是指用户在选择省份后,相应的城市列表会自动更新;而当用户选择某一城市后,该城市的区县列表也会随之显示出来。这一功能不仅提升了用户体验,还简化了数据录入过程,避免了因手动输入错误...
**jQuery 图片热点区域选择技术详解** 在网页设计中,我们常常需要对图片进行互动处理,比如当用户鼠标悬浮在地图的特定区域(热点区域)上时,该区域会高亮显示,提供一种视觉反馈。jQuery,作为一个轻量级、功能...
该插件的主要目标是实现一个弹出式的下拉框,用户在选择省份后,下拉框会自动更新为对应城市的选项,接着在城市选定后,再显示相应的区县选项。这种联动效果是通过监听用户在下拉框中的选择事件,然后动态加载和更新...
在这个场景下,用户选择一个省份后,相关的城市会自动加载;接着选择城市,对应的区县又会动态显示出来。这种功能在注册、地址填写等页面非常常见,能够大大提高用户的输入效率。 首先,我们需要理解jQuery的核心...
3. **省份选择器事件监听**:为省份选择器添加`onchange`事件监听器,当用户选择省份时,根据用户的选择更新城市选择器的内容。 ```javascript province.onchange = function () { var city = document....
这个“jquery省市区三级联动插件”是为了解决一个常见的前端开发需求——实现省市区选择的联动效果。这种功能常见于用户注册、地址填写等场景,能够提供用户友好的交互体验。 首先,我们要理解什么是“三级联动”。...
如果城市列表非常大,考虑使用懒加载技术,只在用户滚动到特定位置时加载更多数据。这样可以减少初始加载时间,提高用户体验。 6. **数据源处理**: 如果城市列表的数据来自后端API,需要通过Ajax请求获取。在...
当用户在省份选择框中选择一项时,插件通过JavaScript动态加载相应的市级和区级数据,更新对应的下拉菜单。通常,这些数据以JSON格式存储,包含中国所有省份、城市和区县的名称和ID,插件在运行时读取这些数据并生成...
在"City"文件中,可能包含了一个JSON数组或者CSV格式的数据,列出了所有省份、城市和县的名称及ID。例如: ```json [ {"id":1,"name":"北京市","provinceId":0}, {"id":2,"name":"上海市","provinceId":0}, ... ...
4. **数据处理**:当省份选择改变时,根据用户选择的省份从数据结构中筛选出对应的城市数据,并动态创建城市下拉框的选项。 5. **DOM动态创建**:使用`createElement`、`appendChild`等方法动态生成HTML元素,用于...
标题中的“JQ插件第五十三:地区选择面板2015年4月12日版本”表明我们讨论的是一个基于jQuery的插件,用于实现一个特定功能——地区选择面板。这个版本发布于2015年4月12日,意味着它是一个历史版本,可能在当时具有...
这种功能常见于许多网站的注册或地址填写页面,用户在选择省份时,城市和区县会自动更新,而无需整个页面重新加载。 首先,让我们了解Ajax的核心概念。Ajax允许Web应用在不重新加载整个页面的情况下与服务器进行...
三级联动的基本原理是,当用户在一级选择(如省份)中做出选择后,二级选择(如城市)会根据一级选择的结果动态更新其可选项;同理,二级选择确定后,三级选择(如区域)也会根据前两级的选择进行更新。这种实时...
在压缩包中的文件名称“jQuery手机端世界城市地区四级联动菜单代码”揭示了实现这一功能的技术框架——jQuery。jQuery是一个广泛使用的JavaScript库,以其简洁的API和强大的DOM操作能力著称。在这个场景中,它被用于...