关于jsp中两个下拉列表关联后第二个下拉列表取值的问题
我用的是jsp先从数据库中读取数据,然后有两个下拉列表,当我选取第一个下拉列表作导航分类(第一个有固定值),想用第一个下拉列表的onchange函数来对第二个下拉列表进行...
我用的是jsp先从数据库中读取数据,然后有两个下拉列表,当我选取第一个下拉列表作导航分类(第一个有固定值),想用第一个下拉列表的onchange函数来对第二个下拉列表进行值的相应改变,但这些值我是用session放着的,用什么方法可以解决第二个下拉列表的取值问题呢
展开
展开全部
var dishSeriesNode = $("#dishSeries");
dishSeriesNode.change(function(){
$("#dishType").removeAttr("disabled","disabled");
var dishSeries = dishSeriesNode.val();
if(dishSeries!="" && dishSeries!="套餐"){
isLogin(path);
var dataSourceName = $("#dataSourceName").val();
var restaurantId = $("#restaurantId").val();
var postData = "dataSourceName=" + dataSourceName + "&restaurantInfo.restaurantId=" + restaurantId +
"&dishAnalysis.dishSeries=" + dishSeries;
var url = path + "/restaurant/queryDishTypeDishAnalysis.action?serialId=" + new Date().toString();
$.post(url,postData,function(data){
var str = $.trim(data.replace(/"/g,'"')); //将字符串中的"""全部转换为'"',然后再去除空格
var obj = eval(str); //利用eval()转换json数据
var dishTypeInfo = obj["dishTypeInfo"];
//设置菜类
var selectNode = $("#dishType");
//清空列表中的所有子元素
selectNode.empty();
for(var i = 1;i <= dishTypeInfo.num;i++){
if(i==1){
var newOptionNode = $("<option value='' selected>全部</option>");
newOptionNode.appendTo(selectNode);
}
var newOptionNode = $("<option value='" + obj[i].dishType+"'>" + obj[i].dishType + "</option>");
newOptionNode.appendTo(selectNode);
}
});
}
就是第一个下拉列别 change()的时候 把他的Id 或者别的到,然后去执行一个Action方法,这个方法要执行SQL语句 select name from tabelName where id = ? 这个问号传的就是 第一个下拉列表的值,然后将这个查询后的List() (这个list要在Manager(service层)处理)在js里for循环遍历下. 追加上相应的Dom 节点就OK了.
下面是 service层的方法,不管怎样 你别用Session.
@Override
public StringBuilder queryDishType(int restaurantId, String dishSeries) {
StringBuilder builder = new StringBuilder();
List<Object> list = dishKindDao.queryDishType(restaurantId, dishSeries);
Iterator<Object> iter = list.iterator();
//采用对象的方式回传客户对象
//如果回传表示对象的json,需要在最外层加上一个括号,否则页面解析会出错
int i = 1;
builder.append("({");
while(iter.hasNext()){
String dishType = ((Object[])iter.next())[1].toString();
if(dishType!=null&&!dishType.trim().equals("")){
builder.append(""+i+":{dishType:\"").append(dishType)
.append("\"},");
i++;
}
}
i=i-1;
builder.append("dishTypeInfo:{num:"+i+"}})");
return builder;
}
dishSeriesNode.change(function(){
$("#dishType").removeAttr("disabled","disabled");
var dishSeries = dishSeriesNode.val();
if(dishSeries!="" && dishSeries!="套餐"){
isLogin(path);
var dataSourceName = $("#dataSourceName").val();
var restaurantId = $("#restaurantId").val();
var postData = "dataSourceName=" + dataSourceName + "&restaurantInfo.restaurantId=" + restaurantId +
"&dishAnalysis.dishSeries=" + dishSeries;
var url = path + "/restaurant/queryDishTypeDishAnalysis.action?serialId=" + new Date().toString();
$.post(url,postData,function(data){
var str = $.trim(data.replace(/"/g,'"')); //将字符串中的"""全部转换为'"',然后再去除空格
var obj = eval(str); //利用eval()转换json数据
var dishTypeInfo = obj["dishTypeInfo"];
//设置菜类
var selectNode = $("#dishType");
//清空列表中的所有子元素
selectNode.empty();
for(var i = 1;i <= dishTypeInfo.num;i++){
if(i==1){
var newOptionNode = $("<option value='' selected>全部</option>");
newOptionNode.appendTo(selectNode);
}
var newOptionNode = $("<option value='" + obj[i].dishType+"'>" + obj[i].dishType + "</option>");
newOptionNode.appendTo(selectNode);
}
});
}
就是第一个下拉列别 change()的时候 把他的Id 或者别的到,然后去执行一个Action方法,这个方法要执行SQL语句 select name from tabelName where id = ? 这个问号传的就是 第一个下拉列表的值,然后将这个查询后的List() (这个list要在Manager(service层)处理)在js里for循环遍历下. 追加上相应的Dom 节点就OK了.
下面是 service层的方法,不管怎样 你别用Session.
@Override
public StringBuilder queryDishType(int restaurantId, String dishSeries) {
StringBuilder builder = new StringBuilder();
List<Object> list = dishKindDao.queryDishType(restaurantId, dishSeries);
Iterator<Object> iter = list.iterator();
//采用对象的方式回传客户对象
//如果回传表示对象的json,需要在最外层加上一个括号,否则页面解析会出错
int i = 1;
builder.append("({");
while(iter.hasNext()){
String dishType = ((Object[])iter.next())[1].toString();
if(dishType!=null&&!dishType.trim().equals("")){
builder.append(""+i+":{dishType:\"").append(dishType)
.append("\"},");
i++;
}
}
i=i-1;
builder.append("dishTypeInfo:{num:"+i+"}})");
return builder;
}
展开全部
明显的应该走ajax 。
另外这个数据你放到session中是取不到。
你可以放到页面js里,用数组或者json存取。
另外这个数据你放到session中是取不到。
你可以放到页面js里,用数组或者json存取。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第二个下拉列表动态赋值了,从第一个的change事件里传一个参数到js里,然后再获取session中的数据,然后动态将数据放入第二个下拉列表
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询