【JavaScript】下拉联动回显问题
首先是多级下拉联动实现:
这是DOM结构:
<div>
<label style="margin-left: 10px;display: inline-block;"><span style="color: red;">*</span> 故障类别1:</label>
<select id="faultCategory1" style="width: 49%;border: black 1px solid;">
<option value ="0">请选择</option>
</select>
</div>
<div>
<label style="margin-left: 10px;display: inline-block;"><span style="color: red;">*</span> 故障类别2:</label>
<select id="faultCategory2" style="width: 49%;border: black 1px solid;">
<option value ="0">请先选择(故障类别1)</option>
</select>
</div>
<div>
<label style="margin-left: 10px;display: inline-block;"><span style="color: red;">*</span> 故障类别3:</label>
<select id="faultCategory3" style="width: 49%;border: black 1px solid;">
<option value ="0">请先选择(故障类别2)</option>
</select>
</div>
<div>
<label style="margin-left: 10px;display: inline-block;"><span style="color: red;">*</span> 故障类别4:</label>
<select id="faultCategory4" style="width: 49%;border: black 1px solid;">
<option value ="0">请先选择(故障类别3)</option>
</select>
</div>
首先绑定这些Selector:
var $faultCategory1 = $('#faultCategory1'); // 故障类别1
var $faultCategory2 = $('#faultCategory2'); // 故障类别2
var $faultCategory3 = $('#faultCategory3'); // 故障类别3
var $faultCategory4 = $('#faultCategory4'); // 故障类别4
第一个下拉是直接请求即可:
dms.sendAjaxRequset({
url : dms.getDmsPath()["claimUsed"] + "/claimfaultdata/all/queryfaultcgy1",
async : false,
timeout: 3000, //超时时间设置为3秒;
contentType: "application/json",
type: 'GET',
success: function(result) {
console.log(JSON.stringify(result));
let opt = '';
for (let i = 0; i < result.length; i++) {
opt += '<option value="' + result[i].FAULT_CODE + '">' + result[i].FAULT_NAME + '</option>';
}
$faultCategory1.find('option:eq(0)').after(opt);
},
error : function (p1, p2, p3) {
console.log(JSON.stringify(p1) + '\n' + JSON.stringify(p2) + '\n' + JSON.stringify(p3) + '\n');
}
});
第二个就需要靠change事件监听改变,然后取第一个下拉选中的值来请求获取:
如果改变的是默认值,就不请求接口加载下拉
但是每一次改变选择都需要清空之前加载的下拉内容
$faultCategory1.change(function () {
let faultCode = $faultCategory1.find('option:selected').val();
// 类别3和类别4 清除
$faultCategory3.find('option:eq(0)').nextAll().remove();
$faultCategory4.find('option:eq(0)').nextAll().remove();
$faultCategory2.find('option:eq(0)').nextAll().remove();
if (faultCode == 0) return;
setTimeout(function () {
dms.sendAjaxRequset({
url : dms.getDmsPath()["claimUsed"] + "/claimfaultdata/all/queryfaultcgy2/" + faultCode,
async : false,
timeout: 3000, //超时时间设置为3秒;
contentType: "application/json",
type: 'GET',
success: function(result) {
console.log(JSON.stringify(result));
let opt = '';
for (let i = 0; i < result.length; i++) {
opt += '<option value="' + result[i].FAULT_CODE + '">' + result[i].FAULT_NAME + '</option>';
}
$faultCategory2.find('option:eq(0)').after(opt);
},
error : function (p1, p2, p3) {
console.log(JSON.stringify(p1) + '\n' + JSON.stringify(p2) + '\n' + JSON.stringify(p3) + '\n');
}
});
}, 200);
});
以此类推3和4:
// 故障类别3
$faultCategory2.change(function () {
let faultCode = $faultCategory2.find('option:selected').val();
// 类别4 清除
$faultCategory3.find('option:eq(0)').nextAll().remove();
$faultCategory4.find('option:eq(0)').nextAll().remove();
if (faultCode == 0) return;
setTimeout(function () {
dms.sendAjaxRequset({
url : dms.getDmsPath()["claimUsed"] + "/claimfaultdata/all/queryfaultcgy3/" + faultCode,
async : false,
timeout: 3000, //超时时间设置为3秒;
contentType: "application/json",
type: 'GET',
success: function(result) {
console.log(JSON.stringify(result));
let opt = '';
for (let i = 0; i < result.length; i++) {
opt += '<option value="' + result[i].FAULT_CODE + '">' + result[i].FAULT_NAME + '</option>';
}
$faultCategory3.find('option:eq(0)').after(opt);
},
error : function (p1, p2, p3) {
console.log(JSON.stringify(p1) + '\n' + JSON.stringify(p2) + '\n' + JSON.stringify(p3) + '\n');
}
});
}, 200);
});
// 故障类别4
$faultCategory3.change(function () {
let faultCode = $faultCategory3.find('option:selected').val();
$faultCategory4.find('option:eq(0)').nextAll().remove();
if (faultCode == 0) return;
setTimeout(function () {
dms.sendAjaxRequset({
url : dms.getDmsPath()["claimUsed"] + "/claimfaultdata/all/queryfaultcgy4/" + faultCode,
async : false,
timeout: 3000, //超时时间设置为3秒;
contentType: "application/json",
type: 'GET',
success: function(result) {
console.log(JSON.stringify(result));
let opt = '';
for (let i = 0; i < result.length; i++) {
opt += '<option value="' + result[i].FAULT_CODE + '">' + result[i].FAULT_NAME + '</option>';
}
$faultCategory4.find('option:eq(0)').after(opt);
},
error : function (p1, p2, p3) {
console.log(JSON.stringify(p1) + '\n' + JSON.stringify(p2) + '\n' + JSON.stringify(p3) + '\n');
}
});
}, 200);
});
编辑页面下,接口会提供已经选中的值,要实现下拉列表选中的状态:
这里的解决办法是直接在加载的时候就设置好
这是另外一个下拉的列表,参数有变动,就不好封装函数处理,直接裸写了
setTimeout(function () {
dms.sendAjaxRequset({
url : dms.getDmsPath()["claimUsed"] + "/claimBaseData/10011001/vrtSel",
async : false,
timeout: 3000, //超时时间设置为3秒;
contentType: "application/json",
type: 'GET',
success: function(resultI) {
console.log(JSON.stringify(resultI));
let opt = '';
for (let i = 0; i < resultI.length; i++) {
if (vrt == resultI[i].ITEM_CODE || vrt == resultI[i].VRT) {
vrt = resultI[i].VRT;
opt += '<option value="' + resultI[i].ITEM_CODE + '" vrt="' + resultI[i].VRT + '" selected>' + resultI[i].DESC_ZH + '</option>'; dms.sendAjaxRequset({
url : dms.getDmsPath()["claimUsed"] + "/claimBaseData/10011001/" + vrt + "/vfgSel",
async : false,
timeout: 3000, //超时时间设置为3秒;
contentType: "application/json",
type: 'GET',
success: function(resultJ) {
// console.log('VFG-list:' + 'vfg - ' + vfg + JSON.stringify(result));
let opt = '';
for (let j = 0; j < resultJ.length; j++) {
// opt += '<option value="' + result[i].ITEM_CODE + '" vfg="' + result[i].VFG + '">' + result[i].DESC_ZH + '</option>';
if (resultJ[j].VFG == vfg || resultJ[j].ITEM_CODE == vfg) {
vfg = resultJ[j].VFG;
opt += '<option value="' + resultJ[j].ITEM_CODE + '" vfg="' + resultJ[j].VFG + '" selected>' + resultJ[j].DESC_ZH + '</option>'; dms.sendAjaxRequset({
url : dms.getDmsPath()["claimUsed"] + "/claimBaseData/10011001/" + vfg + "/cccSel",
async : false,
timeout: 3000, //超时时间设置为3秒;
contentType: "application/json",
type: 'GET',
success: function(resultK) {
// console.log('CCC-list:' + 'ccc - ' + ccc +JSON.stringify(result));
let opt3 = '';
for (let k = 0; k < resultK.length; k++) {
// opt += '<option value="' + result[i].ITEM_CODE + '" ccc="' + result[i].CCC + '">' + result[i].DESC_ZH + '</option>';
if (resultK[k].CCC == ccc || resultK[k].ITEM_CODE == ccc) {
opt3 += '<option value="' + resultK[k].ITEM_CODE + '" ccc="' + resultK[k].CCC + '" selected>' + resultK[k].DESC_ZH + '</option>';
continue; // break;
}
opt3 += '<option value="' + resultK[k].ITEM_CODE + '" ccc="' + resultK[k].CCC + '">' + resultK[k].DESC_ZH + '</option>';
}
$CCC.find('option:eq(0)').after(opt3);
},
error : function (p1, p2, p3) {
console.log(JSON.stringify(p1) + '\n' + JSON.stringify(p2) + '\n' + JSON.stringify(p3) + '\n');
}
}); continue;
}
opt += '<option value="' + resultJ[j].ITEM_CODE + '" vfg="' + resultJ[j].VFG + '">' + resultJ[j].DESC_ZH + '</option>';
}
$VFG.find('option:eq(0)').after(opt);
},
error : function (p1, p2, p3) {
console.log(JSON.stringify(p1) + '\n' + JSON.stringify(p2) + '\n' + JSON.stringify(p3) + '\n');
}
}); continue;
}
opt += '<option value="' + resultI[i].ITEM_CODE + '" vrt="' + resultI[i].VRT + '">' + resultI[i].DESC_ZH + '</option>';
}
$VRT.find('option:eq(0)').after(opt);
},
error : function (p1, p2, p3) {
console.log(JSON.stringify(p1) + '\n' + JSON.stringify(p2) + '\n' + JSON.stringify(p3) + '\n');
}
});
}, 350);
故障类别是比较固定的,这里就可以封装调用了
/**
* 解决故障类别回显问题
* @param {Object} i 对应接口的1,2,3,4
* @param {Object} p 接口的url参数
* @param {Object} targetElement 目标下拉的JqDom对象
*/
function promiseForSelectShow(i, pa1, pa2, targetElement) {
dms.sendAjaxRequset({
url : dms.getDmsPath()["claimUsed"] + "/claimfaultdata/all/queryfaultcgy"+ i + "/" + pa1,
async : false,
timeout: 3000, //超时时间设置为3秒;
contentType: "application/json",
type: 'GET',
success: function(result) {
// console.log(JSON.stringify(result));
let opt = '';
for (let i = 0; i < result.length; i++) {
if (result[i].FAULT_CODE == pa2 ) { // || result[i]..FAULT_NAME == p
opt += '<option value="' + result[i].FAULT_CODE + '" selected>' + result[i].FAULT_NAME + '</option>';
continue;
}
opt += '<option value="' + result[i].FAULT_CODE + '">' + result[i].FAULT_NAME + '</option>';
}
targetElement.find('option:eq(0)').after(opt);
},
error : function (p1, p2, p3) {
console.log(JSON.stringify(p1) + '\n' + JSON.stringify(p2) + '\n' + JSON.stringify(p3) + '\n');
}
});
} promiseForSelectShow(2, qf1, qf2, $faultCategory2);
promiseForSelectShow(3, qf2, qf3, $faultCategory3);
promiseForSelectShow(4, qf3, qf4, $faultCategory4);
【JavaScript】下拉联动回显问题的更多相关文章
- JS 实现下拉框回显
JS 实现下拉框回显 学习内容: 需求 总结: 学习内容: 需求 用 JS 实现下拉框回显 实现代码 <!DOCTYPE html> <html lang="en" ...
- Layui:select下拉框回显
一..需求场景分析 基于Thymeleaf模板下的layui下选框回显. 二.获得一个Layui标配的下拉框,我们需要在html中填写的内容如下 <div class="layui-f ...
- vue 运用ElementUI,做select下拉框回显
第一.加载的顺序,应该先加载下拉框要选择的数据,然后在通过编辑查询数据后回显. 第二.要保证select下拉的ID和v-model里边的id保持一致. 第三.elementUI就会自动的将数据回显了. ...
- AJAX二级下拉联动【XML方式】
AJAX二级下拉联动案例 我们在购物的时候,常常需要我们来选择自己的收货地址,先选择省份,再选择城市- 有没有发现:当我们选择完省份的时候,出现的城市全部都是根据省份来给我们选择的.这是怎么做到的呢? ...
- 菜鸟学Java(七)——Ajax+Servlet实现无刷新下拉联动
下拉联动的功能可以说非常的常用,例如在选择省.市等信息的时候:或者在选择大类.小类的时候.总之,下拉联动很常用.今天就跟大家分享一个简单的二级下拉联动的功能. 大类下拉框:页面加载的时候就初始化大类的 ...
- Ajax案例-基于XML,以POST方式,完成省份-城市二级下拉联动
<%@ page language="java" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC & ...
- Jquery Json 下拉联动
#region dataTable转换成Json格式 /// <summary> /// dataTable转换成Json格式 /// </summary> /// <p ...
- 弹性ScrollView,和下啦刷新的效果类似 实现下拉弹回和上拉弹回
今天做了一个弹性ScrollView,和下啦刷新的效果类似,我想这个很多需求都用的这种效果 其实这是一个自定义的scrollView,上代码,这是我写在一个公共的组件包里的 package com.p ...
- select下拉菜单反显不可改动,且submit能够提交数据
首先通过后台funcA()将下拉菜单反显不可改动的数据response到disable.jsp页面,disable.jsp: <script> var data1=${result.obj ...
- 用NPOI导出Excel,生成下拉列表、以及下拉联动列表(第1篇/共3篇)
最近帅帅的小毛驴遇到一个很奇葩的需求: 导出Excel报表,而且还要带下拉框,更奇葩的是,下拉框还是联动的. 小毛驴一天比较忙,所以这等小事自然由我来为她分忧了.经历了两天,做了几种解决方案,最后完美 ...
随机推荐
- kettle从入门到精通 第六十一课 ETL之kettle 任务调度器,轻松使用xxl-job调用kettle中的job和trans
1.大家都知道kettle设计的job流程文件有个缺点:只能设置简单的定时任务,无法设置复杂的如支持cron表达式的job. 今天给大家分享一个使用xxl-job调度carte的流程文件的示例.整个调 ...
- core dump 路径定义以及监控
Core Dump 是什么? Core Dump 是指进程异常退出时,操作系统将进程的内存状态保存到文件中,这个文件就是 Core Dump 文件,中文一般翻译为"核心转储",哈, ...
- 前端实现预览PDF
下载包 npm install react-pdf 我使用的是react-pdf@5.7.2版本 以下例子使用的是react创建的项目 直接上代码=>cv可用,保证高效 1.新增依赖 yarn ...
- java并发的发布和订阅测试
现在编码的时候,为了处理消息,大家动不动就上个重器,例如MQ之类的.但很多时候,并不是那么有必要,因为数据量和并发其实远远不够. 可以替代的方案非常多,其中一个是java.util.concurren ...
- mysql的varchar和oracle的varchar2比较
首先说结论: 1.mysql存储的是字符数(不分语言) 2.oracle存储的需要看定义,如果定义为varchar2(n),则默认是n个字节,如果是varchar2(n char)则是n个字节. 3. ...
- Linux 内核:设备驱动模型(3)class与device
Linux 内核:设备驱动模型(3)class与device 背景 前面我们知道了设备如何通过总线与驱动匹配,也了解了设备插拔时与用户空间是如何通过uevent基于环境变量进行交互的. 前面看过了设备 ...
- JSP快速上手与MVC模式和三层架构的知识点总结+综合案例
阅读提示: 说明 由于JSP实在是太 难读 难写 复杂 占资源 难调试 不分离 了,拉跨!(节目效果哈,勿喷),作为一种有(ji)更(hu)好(jiu)的(yao)上(bei)位(tao)替(tai) ...
- Java FastJson解析json字符串
json转map Map<String, 实体类> titleMap=JSON.parseObject(JSON字符串, new TypeReference<HashMap<S ...
- 文件系统(九):一文看懂yaffs2文件系统原理
liwen01 2024.07.07 前言 yaffs 是专为nand flash 设计的一款文件系统,与jffs 类似,都是属于日志结构文件系统.与jffs 不同的是,yaffs 文件系统利用了na ...
- Vue介绍和使用
一.Vue介绍 - Vue是一套构建用户界面的渐进式前端框架.- 只关注视图层,并且非常容易学习,还可以很方便的与其它库或已有项目整合.- 通过尽可能简单的API来实现响应数据的绑定和组合的视图组件. ...