JavaScript Ajax Json實現上下級下拉框聯動效果例項程式碼
阿新 • • 發佈:2019-02-08
最近嘗試做出一個部門和人員的下拉框聯動功能,部門和人員的對應關係是1:N
程式碼如下:
<div class="forntName">部門</div>
<div class="inpBox">
<select name="department" id="department" onchange="change();" style="width:200px;" >
<option value='-1'>請選擇</option>
<s:iterator value="departmentList">
<option value='<s:property value="departmentCode"/>'><s:property value="departmentName"/></option>
</s:iterator>
<select>
</div>
<SPAN style="WHITE-SPACE: pre"> </SPAN><div class="forntName">人員</div>
<div class="inpBox">
<select name="workorderOperator" id = "workorderOperator" style="width:200px;">
<s:iterator value="userList">
<option value='<s:property value="userName"/>'><s:property value="userName"/></option>
</s:iterator>
</select>
</div>
部門下拉框的onchange()事件走一個AJAX方法,返回一個JSON物件(JSON裡放的是個LIST)。
js方法在此頁面的寫法:
程式碼如下:
<script type="text/javascript">
function change(){
var departmentCode =$("#department").val();
var params = {
'departmentCode':departmentCode
};
$.ajax({
type: 'get',
url: "departmentChangeEvent.shtml",
cache: false,
data: params,
dataType: 'json',
success: function(data){
var sel2 = $("#workorderOperator");
sel2.empty();
if(data==null)
{
sel2.append("<option value = '-1'>"+"部門人員為空"+"</option>");
}
var items=data.list;
if(items!=null)
{
for(var i =0;i<items.length;i++)
{
var item=items[i];
sel2.append("<option value = '"+item.userName+"'>"+item.userChinesename+"</option>");
};
}
else
{
sel2.empty();
}
},
error: function(){
return;
}
});
//$.post(url, params, callback);
}
</script>
此處返回的data裡包含list(list見後文),list裡包含著人員的程式碼,人員的姓名兩個屬性。然後先把人員下拉框empty(),通過select控制元件append方法 新增新的下拉框元素。
後臺程式碼:
程式碼如下:
public String departmentChangeEvent() throws Exception{
userList=service.queryForList("Workorder.queryUserByDepartmentCode", departmentCode);
if(userList!=null&&userList.size()>0)
{
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/html;charset=utf-8");
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setHeader("Cache-Control", "no-store");
PrintWriter writer = response.getWriter();
JSONObject json = new JSONObject();
Map map = new HashMap();
map.put("list",userList);
JSONObject jso = JSONObject.fromObject(map);
writer.write(jso.toString());
writer.flush();
writer.close(); }
return null;
}
這個方法是部門切換事件,通過departmentCode(field域,有set,get)來求的當前部門下的使用者放到userList中。
然後通過標準寫法把userList放到一個定義好的HashMap中,KEY為list。
程式碼如下:
<STRONG> JSONObject jso = JSONObject.fromObject(map);</STRONG>
這是最為關鍵的一步,有的json物件建立方法也可以為JSONObject jso = new JSONObject() ; 然後把list裡的記錄放入到jso中。。。
在這裡是行不通的,前臺會認為返回的是個字串。。。
struts中 返回型別為json
程式碼如下:
<action name="departmentChangeEvent" class="workorderAction" method="departmentChangeEvent">
<result type="json">
</result>
</action>
程式碼如下:
<div class="forntName">部門</div>
<div class="inpBox">
<select name="department" id="department" onchange="change();" style="width:200px;" >
<option value='-1'>請選擇</option>
<s:iterator value="departmentList">
<option value='<s:property value="departmentCode"/>'><s:property value="departmentName"/></option>
</s:iterator>
<select>
</div>
<SPAN style="WHITE-SPACE: pre"> </SPAN><div class="forntName">人員</div>
<div class="inpBox">
<select name="workorderOperator" id = "workorderOperator" style="width:200px;">
<s:iterator value="userList">
<option value='<s:property value="userName"/>'><s:property value="userName"/></option>
</s:iterator>
</select>
</div>
部門下拉框的onchange()事件走一個AJAX方法,返回一個JSON物件(JSON裡放的是個LIST)。
js方法在此頁面的寫法:
程式碼如下:
<script type="text/javascript">
function change(){
var departmentCode =$("#department").val();
var params = {
'departmentCode':departmentCode
};
$.ajax({
type: 'get',
url: "departmentChangeEvent.shtml",
cache: false,
data: params,
dataType: 'json',
success: function(data){
var sel2 = $("#workorderOperator");
sel2.empty();
if(data==null)
{
sel2.append("<option value = '-1'>"+"部門人員為空"+"</option>");
}
var items=data.list;
if(items!=null)
{
for(var i =0;i<items.length;i++)
{
var item=items[i];
sel2.append("<option value = '"+item.userName+"'>"+item.userChinesename+"</option>");
};
}
else
{
sel2.empty();
}
},
error: function(){
return;
}
});
//$.post(url, params, callback);
}
</script>
此處返回的data裡包含list(list見後文),list裡包含著人員的程式碼,人員的姓名兩個屬性。然後先把人員下拉框empty(),通過select控制元件append方法 新增新的下拉框元素。
後臺程式碼:
程式碼如下:
public String departmentChangeEvent() throws Exception{
userList=service.queryForList("Workorder.queryUserByDepartmentCode", departmentCode);
if(userList!=null&&userList.size()>0)
{
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/html;charset=utf-8");
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setHeader("Cache-Control", "no-store");
PrintWriter writer = response.getWriter();
JSONObject json = new JSONObject();
Map map = new HashMap();
map.put("list",userList);
JSONObject jso = JSONObject.fromObject(map);
writer.write(jso.toString());
writer.flush();
writer.close(); }
return null;
}
這個方法是部門切換事件,通過departmentCode(field域,有set,get)來求的當前部門下的使用者放到userList中。
然後通過標準寫法把userList放到一個定義好的HashMap中,KEY為list。
程式碼如下:
<STRONG> JSONObject jso = JSONObject.fromObject(map);</STRONG>
這是最為關鍵的一步,有的json物件建立方法也可以為JSONObject jso = new JSONObject() ; 然後把list裡的記錄放入到jso中。。。
在這裡是行不通的,前臺會認為返回的是個字串。。。
struts中 返回型別為json
程式碼如下:
<action name="departmentChangeEvent" class="workorderAction" method="departmentChangeEvent">
<result type="json">
</result>
</action>