二级联动,大类下拉框选出来后,会影响小类的下拉框,导致不同的值。
以下一共有3种办法:
1、一种办法,是吧所有的大类和所有的小类都弄到页面上,把小类大部分都隐藏起来,然后根据大类选择不同时,用ajax显示不同的小类。
【适用类型】不用访问数据库,比较适合类别都固定了的那种情况。比如,省市联动等情况
以后我用到这种情况的时候在补充到这里来。
2、我的方法是另一种办法:
大类选完之后,ajax返回到后台,获得其子类的列表。
【适用类型】类别可能在后台进行改动,所以这个类别不能固定,必须通过数据库取出类别来。
但是取出类别来之后又可以有两种呈现方式。
①一种是构造出第一种办法的样子,这样也就访问数据库一次。
②另一种是根据大类变动,访问数据库取出小类
我下面的方法是,最后一种:根据大类变动,从数据库中取出小类
页面:我用的struts2框架,遍历工具也可以用jstl的c
<div class="form-group" style="width:240px">
<div class="input-group">
<span class="input-group-addon" id="basic-addon1">商品大类</span>
<select class="form-control" name="upkindid" id="upkind" οnchange="loadInfo()" >
<option value='-1'> ---请选择--- </option>
<s:iterator value="upList" var="upkind">
<option value='${upkind.id }'>${upkind.name } </option>
</s:iterator>
</select>
</div>
</div>
<div class="form-group" style="width:240px">
<div class="input-group">
<span class="input-group-addon" id="basic-addon2">商品小类</span>
<select class="form-control" name="dokindid" id="dokind" >
<option value='-1' selected>---请选择---</option>
<s:iterator value="dols" var="dokind">
<option value='${dokind.id }'>${dokind.name } </option>
</s:iterator>
</select>
</div>
</div>
// 种类的二级联动
function loadInfo(){
var upkindId = $("#upkind").val();
//alert(upkindId);
$("#dokind option").remove();
$("#dokind").append("<option value='-1' selected>---请选择---</option>");
$.ajax({
url:getContextPath()+"/main/kindAciton",
type:"post",
dataType:"json",
data:{ 'upKind' : upkindId },
success: function(data,textStatus){
//alert(textStatus);
$.each(data,function(n,value){
var str = "<option value='"+ value.id +"' >"+ value.name +" </option>";
$("#dokind").append(str);
});
},
error: function(data){
alert("分页出错~");
}
});
}
action:
public class KindAction extends BaseAction{
private int upKind;
private List<KindBean> doList = new ArrayList<KindBean>();
public String execute() throws Exception{
//System.out.println("kind action: " + upKind);
KindDAO dao = DAOFactory.getKindDAO();
doList = dao.getKindByParentId(upKind) ;
return "success";
}
public int getUpKind() {
return upKind;
}
public void setUpKind(int upKind) {
this.upKind = upKind;
}
public List<KindBean> getDoList() {
return doList;
}
public void setDoList(List<KindBean> doList) {
this.doList = doList;
}
}