【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报表,而且还要带下拉框,更奇葩的是,下拉框还是联动的. 小毛驴一天比较忙,所以这等小事自然由我来为她分忧了.经历了两天,做了几种解决方案,最后完美 ...
随机推荐
- INFINI Labs 产品更新 | 发布 Easysearch Java 客户端,Console 支持 SQL 查询等功能
近年来,日志管理平台越来越流行.使用日志管理平台可以实时地.统一地.方便地管理和查看日志,挖掘日志数据价值,驱动运维.运营,提升服务管理效率. 方案架构 Beats 是轻量级采集器,包括 Filebe ...
- C#.NET BC BouncyCastle 国密 SM2 解密遇到 Invalid point encoding 77
C#.NET BC BouncyCastle 国密 SM2 解密遇到 Invalid point encoding 77 参考:https://blog.csdn.net/seeyouagen/art ...
- SingletonKit单例源码阅读学习
阅读学习QFramwork中的SingletonKit源码. Singleton 普通类的单例 作为最常用的单例模块,通过继承单例泛型类来实现,需要私有构造: //使用第一种接口单例方式 intern ...
- Luban小试牛刀
Luban小试牛刀 LubanUnity LubanUnity配置工具配置解决方案 简介 Github 文档 视频教程 Unity工具 个人感觉挺强大,便捷的,适合中大型游戏项目的配置工作.小 ...
- java并发和排序的简单例子(Runnable+TreeSet)
很多时候并发需要考虑线程安全,但也有很多时候和线程安全毛关系都没有,因为并发最大的作用是并行,线程安全仅仅是并发的一个子话题. 例如常常会用于并发运算,并发i/o. 下文是一个练习笔记. 运行环境:w ...
- shell 根据 指定列 进行 去除 重复行
根据指定列进行去除重复行 这里的重复是指如果两行的某一列数据相同,则认为是重复数据. 例如:第1行与第2行数据,其中的第2列(以- 作为分隔符)明显是重复的. 100069 - ARM Compile ...
- vim中ctags 的使用
--- title: vim中ctags 的使用 EntryName: vim-config-with-ctags date: 2020-08-19 11:17:38 categories: tags ...
- 【资料分享】Xilinx XCZU7EV工业核心板规格书(四核ARM Cortex-A53 + 双核ARM Cortex-R5 + FPGA,主频1.5GHz)
1 核心板简介 创龙科技SOM-TLZU是一款基于Xilinx UltraScale+ MPSoC系列XCZU7EV高性能处理器设计的高端异构多核SoC工业核心板,处理器集成PS端(四核ARM Cor ...
- 对linux的理解--个人理解
linux系统中的命令我觉得可以和windows上的点点点,如文件的查找,文件的新建.删除,用户的添加.删除等来对比理解.一个是点点点,一个是用命令来完成. --------------------- ...
- 在SelfHost项目中获取客户端IP地址
在SelfHost项目中,获取客户端的IP地址比OwinSelfHost项目要复杂一些,可以通过以下方法获得: base.Request.Properties["System.Service ...