自定義三級下拉框字典
在做用戶定製內容的時候,遇到一個需求,要做一個可以自定義內容的三級下拉框,用戶可以自己添加、刪除、修改、移動每一級下拉框中的內容。規則如下:
同級下拉框內容不能出現重複,不同父級的除外;每一級下拉框都必須有值,不能爲空,且每個一級下拉框都必須有對應的二級和三級下拉框值。
分隔符號的意義:
$ 分隔每一個下拉框的值,
# 分隔具有相同父級的次級下拉框值,
| 分隔具有相同父級的同級下拉框值。
數據庫字段存儲格式:
F1|F2$F1S1|F1S2#F2S1|F2S2$F1S1T1|F1S1T2#F1S2T1|F1S2T2#F2S1T1|F2S1T2#F2S2T1|F2S2T2
說明:
First級x項: F1|F2 $
First級Second級x項:F1S1|F1S2 # F2S1|F2S2 $
First級Second級Third級x項:F1S1T1|F1S1T2#F1S2T1|F1S2T2#F2S1T1|F2S1T2#F2S2T1|F2S2T2
有個需要注意的地方,三級下拉框由每個#分隔開的值依次對應二級下拉框值中的一項,就是說從三級下拉框值中是無法區分它是屬於哪個一級下拉框值的。
HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>用戶自定義三級下拉框</title>
<link rel="stylesheet" href="http://cdn.static.runoob.com/libs/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="//code.jquery.com/jquery-1.12.4.js"></script>
<script src="http://cdn.static.runoob.com/libs/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script type="text/javascript" src="../js/customize_select.js"></script>
<link rel="stylesheet" href="../css/customize_select.css" />
</head>
<body>
<br/>
<div style="display: inline-block;color:#4682B4;">
<div style="display: inline-block;">
<div style="display: inline-block;">
<span>新增一級字典</span>
<input type="text" id="MainIpt" />
<input type="hidden" id="MainIptHidden" />
</div>
<div style="margin-top: 10px;">
<span style="line-height: 78px;vertical-align: top;">已選一級字典</span>
<select id="MainSlt" size="6" style="width: 164px;" onchange="SltOnChange(1)">
</select>
</div>
</div>
<div style="display: inline-block;margin-left: 10px;">
<ul class="ulBtn">
<li><input type="button" class="btn" id="MainAdd" value="添加" style="margin-left: 10px;" onclick="InsertDict('MainIpt', 'MainIptHidden', 1)" /></li>
<li><input type="button" class="btn" id="MainEdit" value="修改" style="margin-left: 10px;" onclick="EditDict('MainIpt', 'MainIptHidden', 1)" /></li>
<li><input type="button" class="btn" id="MainUp" value="上移" style="margin-left: 10px;" onclick="MoveDict(-1, 'MainIptHidden', 1, 'MainSlt')" /></li>
<li><input type="button" class="btn" id="MainDown" value="下移" style="margin-left: 10px;" onclick="MoveDict(1, 'MainIptHidden', 1, 'MainSlt')" /></li>
<li><input type="button" class="btn" id="MainDelete" value="刪除" style="margin-left: 10px;" onclick="DeleteDict('MainIptHidden', 1, 'MainSlt')" /></li>
</ul>
</div>
<div style="display: inline-block;margin-left: 30px;">
<div style="display: inline-block;">
<span>新增二級字典</span>
<input type="text" id="SecondIpt" />
<input type="hidden" id="SecondIptHidden" />
</div>
<div style="margin-top: 10px;">
<span style="line-height: 78px;vertical-align: top;">已選二級字典</span>
<select id="SecondSlt" size="6" style="width: 164px;" onchange="SltOnChange(2)">
</select>
</div>
</div>
<div style="display: inline-block;margin-left: 10px;">
<ul class="ulBtn">
<li><input type="button" class="btn" id="SecondAdd" value="添加" style="margin-left: 10px;" onclick="InsertDict('SecondIpt', 'SecondIptHidden', 2)" /></li>
<li><input type="button" class="btn" id="SecondEdit" value="修改" style="margin-left: 10px;" onclick="EditDict('SecondIpt', 'SecondIptHidden', 2)" /></li>
<li><input type="button" class="btn" id="SecondUp" value="上移" style="margin-left: 10px;" onclick="MoveDict(-1,'SecondIptHidden', 2, 'SecondSlt')" /></li>
<li><input type="button" class="btn" id="SecondDown" value="下移" style="margin-left: 10px;" onclick="MoveDict(1,'SecondIptHidden', 2, 'SecondSlt')" /></li>
<li><input type="button" class="btn" id="SecondDelete" value="刪除" style="margin-left: 10px;" onclick="DeleteDict('SecondIptHidden', 2, 'SecondSlt')" /></li>
</ul>
</div>
<div style="display: inline-block;margin-left: 30px;">
<div style="display: inline-block;">
<span>新增三級字典</span>
<input type="text" id="ThirdIpt" />
<input type="hidden" id="ThirdIptHidden" />
</div>
<div style="margin-top: 10px;">
<span style="line-height: 78px;vertical-align: top;">已選三級字典</span>
<select id="ThirdSlt" size="6" style="width: 164px;" onchange="SltOnChange(3)">
</select>
</div>
</div>
<div style="display: inline-block;margin-left: 10px;">
<ul class="ulBtn">
<li><input type="button" class="btn" id="ThirdAdd" value="添加" style="margin-left: 10px;" onclick="InsertDict('ThirdIpt', 'ThirdIptHidden', 3)" /></li>
<li><input type="button" class="btn" id="ThirdEdit" value="修改" style="margin-left: 10px;" onclick="EditDict('ThirdIpt', 'ThirdIptHidden', 3)" /></li>
<li><input type="button" class="btn" id="ThirdUp" value="上移" style="margin-left: 10px;" onclick="MoveDict(-1,'ThirdIptHidden', 3, 'ThirdSlt')" /></li>
<li><input type="button" class="btn" id="ThirdDown" value="下移" style="margin-left: 10px;" onclick="MoveDict(1,'ThirdIptHidden', 3,'ThirdSlt')" /></li>
<li><input type="button" class="btn" id="ThirdDelete" value="刪除" style="margin-left: 10px;" onclick="DeleteDict('ThirdIptHidden', 3,'ThirdSlt')" /></li>
</ul>
</div>
<div>
<ul style="list-style-type: none;padding: 0;margin: 0;line-height: 27px;">
<li style="text-align: center;line-height: 50px;margin-top: 20px;">
<input type="button" id="submitBtn" value="提 交" onclick="FucSubmit()" class="btn" style="width: 66px;height: 31px;" />
</li>
<li style="text-align: center;line-height: 50px;">
<input type="button" id="prodSelect" value="展 示" onclick="AppendDctMain()" class="btn" style="width: 66px;height: 31px;" />
</li>
</ul>
</div>
</div>
<br/><br/>
<br/>
<div id="prodSltDiv" style="color:#4682B4;">
<div>
數據庫相應字段值:<span id="dictData"></span>
</div>
<br/>
<span>請選擇:</span>
<div style="display: -webkit-inline-box;">
<div>
<select id="OneSlt" style="width: 200px;" onchange="AppendDctSecond()"></select>
</div>
<div>
<select id="TwoSlt" style="width: 200px;margin-left: 8px;" onchange="AppendDctThird()"></select>
</div>
<div>
<select id="ThreeSlt" style="width: 200px;margin-left: 8px;" ></select>
</div>
</div>
</div>
</body>
</html>
頁面CSS:
<style type="text/css">
.btn{
border-radius: 3px;
border-color: #4682B4;
background-color: #fff;
color: #4682B4;
border: 1px solid;
width: 44px;
height: 21px;
padding: 0;
}
.btn:hover
{
background-color:#4682B4;
color: #fff;
}
.dropdown-menuNew {
position: absolute;
left: 0;
z-index: 1000;
display: none;
float: left;
min-width: 201px;
padding: 5px 0;
margin: 2px 0 0 59px;
font-size: 14px;
text-align: left;
list-style: none;
background-color: #fff;
-webkit-background-clip: padding-box;
background-clip: padding-box;
border: 1px solid #ccc;
border: 1px solid rgba(0,0,0,.15);
border-radius: 4px;
-webkit-box-shadow: 0 6px 12px rgba(0,0,0,.175);
box-shadow: 0 6px 12px rgba(0,0,0,.175);
}
.ulBtn{
list-style-type: none;
padding: 0;
margin: 0;
line-height: 30px;
}
</style>
頁面JS(可以單獨寫出來到一個js文件中,此處爲直接嵌入html中):
<script type="text/javascript">
//一級字典下拉框對象
var objMainSlt = document.getElementById('MainSlt');
//二級字典下拉框對象
var objSecondSlt = document.getElementById('SecondSlt');
//三級字典下拉框對象
var objThirdSlt = document.getElementById('ThirdSlt');
//三級數據字典存儲集合
var listThirdDDT = [];
//添加函數
function InsertDict(valIptId,hidIptId,dictIndex) {
//過濾前後空格換行等空白字符
var inputvalue = document.getElementById(valIptId).value.replace(/(^\s*)|(\s*$)/g, "");
inputvalue = inputvalue.replace((/,/g), ",").replace((/$/g), "").replace((/#/g), "#").replace((/'/g), "’").replace((/</g), "〈").replace((/>/g), "〉");
var objIptHid = document.getElementById(hidIptId);
if (inputvalue.length > 0 && CheckValue(inputvalue,dictIndex))
{
if(dictIndex == 1){
if (objIptHid.value.length > 0)
{
objIptHid.value += "|" + inputvalue;
}
else {
objIptHid.value += inputvalue;
}
}else if(dictIndex == 2 ){
if(objMainSlt.selectedIndex >= 0)
{
var listDDT = objIptHid.value.split('#');
objIptHid.value = "";
if (listDDT[objMainSlt.selectedIndex] ? listDDT[objMainSlt.selectedIndex].length > 0 : false )
{
listDDT[objMainSlt.selectedIndex] += "|" + inputvalue;
}
else {
listDDT[objMainSlt.selectedIndex] = inputvalue;
}
var listJoin = listDDT.join("#");
objIptHid.value = listJoin;
}else if(objMainSlt.length ==0){
alert("請先輸入一級字典");
}
}else if(dictIndex == 3 ){
if(objSecondSlt.selectedIndex >= 0 && objMainSlt.selectedIndex >= 0 && inputvalue.length > 0)
{
objIptHid.value = "";
var tempDDT = [];
//確定對應的一級字典
if (listThirdDDT[objMainSlt.selectedIndex]) {
tempDDT = listThirdDDT[objMainSlt.selectedIndex].split("#");
} else{
listThirdDDT[objMainSlt.selectedIndex] = "";
}
//確定對應的二級字典
if (tempDDT[objSecondSlt.selectedIndex]) {
tempDDT[objSecondSlt.selectedIndex] += "|" + inputvalue;
} else{
tempDDT[objSecondSlt.selectedIndex] = inputvalue;
}
listThirdDDT[objMainSlt.selectedIndex] = tempDDT.join("#");
objIptHid.value = listThirdDDT.join("#");
}else if(objMainSlt.length ==0 || objSecondSlt.length ==0){
alert("請先輸入一級字典和二級字典");
}
}
AppendDictList(hidIptId,dictIndex);
}
}
//初始化已選字典單選下拉框
function AppendDictList(hidIptId,dictIndex) {
var objIptHid = document.getElementById(hidIptId);
var listDDT;
if(dictIndex == 1){
objMainSlt.innerHTML = "";
listDDT = objIptHid.value.split('|');
for (i = 0; i < listDDT.length; i++) {
var opt = document.createElement("OPTION");
opt.value = listDDT[i];
if (opt.value.length > 0) {
objMainSlt.add(opt, i);
opt.innerText = listDDT[i];
}
if (i == 0) {
opt.selected = true;
}
}
}else if(dictIndex == 2 && objMainSlt.selectedIndex >= 0){
objSecondSlt.innerHTML = "";
listDDT = objIptHid.value.split('#');
if (listDDT[objMainSlt.selectedIndex]) {
var listTempDDT = listDDT[objMainSlt.selectedIndex].split('|');
for (i = 0; i < listTempDDT.length; i++) {
var opt = document.createElement("OPTION");
opt.value = listTempDDT[i];
if (opt.value.length > 0) {
objSecondSlt.add(opt, i);
opt.innerText = listTempDDT[i];
}
if (i == 0) {
opt.selected = true;
}
}
}
}else if(dictIndex == 3){
objThirdSlt.innerHTML = "";
if(objSecondSlt.selectedIndex >= 0 && objMainSlt.selectedIndex >= 0)
{
if (listThirdDDT[objMainSlt.selectedIndex]) {
var listDDT = listThirdDDT[objMainSlt.selectedIndex].split('#');
if (listDDT[objSecondSlt.selectedIndex]) {
var listTempTwoDDT = listDDT[objSecondSlt.selectedIndex].split('|');
for (i = 0; i < listTempTwoDDT.length; i++) {
var opt = document.createElement("OPTION");
opt.value = listTempTwoDDT[i];
if (opt.value.length > 0) {
objThirdSlt.add(opt, i);
opt.innerText = listTempTwoDDT[i];
}
if (i == 0) {
opt.selected = true;
}
}
}
}
}
}
}
//檢查新增字典是否合法
function CheckValue(checkvalue,dictIndex) {
//字符數檢查
var str, Num = 0;
for (j = 0; j < checkvalue.length; j++) {
str = checkvalue.substring(j, j + 1);
if (str <= "~") //對雙字節字特殊處理
Num += 1;
else
Num += 2;
if (Num > 50) {
alert("備選值最多爲50個英文字符或25箇中文字符!");
return false;
}
}
//保留字符檢查
str = "";
if (checkvalue.indexOf("'") > -1) {
str = "請不要在新增項中使用\'字符";
}else if (checkvalue.indexOf("|") > -1) {
str = "請不要在新增項中使用\|字符";
} else if(checkvalue.indexOf("#") > -1){
str = "請不要在新增項中使用\#字符";
}else if (checkvalue.indexOf("$") > -1) {
str = "請不要在新增項中使用\$字符";
}
if(str != ""){
alert(str);
return false;
}
//是否存在重複項檢查
var listDDT;
if (dictIndex == 1) {
listDDT = document.getElementById("MainIptHidden").value.split('|');
for (i = 0; i < listDDT.length; i++) {
if (checkvalue == listDDT[i]) {
alert("一級字典已存在相同的值。");
return false;
}
}
} else if(dictIndex == 2){
if(objMainSlt.selectedIndex >= 0)
{
listDDT = document.getElementById("SecondIptHidden").value.split('#');
if (listDDT[objMainSlt.selectedIndex] ? listDDT[objMainSlt.selectedIndex].length > 0 : false ) {
var tempDDTSecond = listDDT[objMainSlt.selectedIndex].split('|');
for (i = 0; i < tempDDTSecond.length; i++) {
if (checkvalue == tempDDTSecond[i]) {
alert("二級字典已存在相同的值。");
return false;
}
}
}
}
} else if(dictIndex == 3){
if (listThirdDDT[objMainSlt.selectedIndex]) {
var tempDDTthird = listThirdDDT[objMainSlt.selectedIndex].split("#");
if (tempDDTthird[objSecondSlt.selectedIndex]) {
var TempArray = tempDDTthird[objSecondSlt.selectedIndex].split('|');
for (i = 0; i < TempArray.length; i++) {
if (checkvalue == TempArray[i]) {
alert("三級字典已存在相同的值。");
return false;
}
}
}
}
}
return true;
}
//切換選中項時
function SltOnChange(sltIndex){
var objPrePreSlt = document.getElementById('MainSlt');
var objPreSlt = document.getElementById('SecondSlt');
if(sltIndex == 1){
//重新初始化二級字典
AppendDictList('SecondIptHidden', 2);
//重新初始化三級字典
AppendDictList('ThirdIptHidden', 3);
}else if(sltIndex == 2){
//重新初始化三級字典
AppendDictList('ThirdIptHidden', 3);
}
}
//修改選中的數據字典
function EditDict(valIptId,hidIptId,dictIndex){
//過濾前後空格換行等空白字符
var inputvalue = document.getElementById(valIptId).value.replace(/(^\s*)|(\s*$)/g, "");
inputvalue = inputvalue.replace((/,/g), ",").replace((/$/g), "").replace((/#/g), "#").replace((/'/g), "’").replace((/</g), "〈").replace((/>/g), "〉");
var objIptHid = document.getElementById(hidIptId);
var editedValue = "";
if (inputvalue.length > 0 && CheckValue(inputvalue,dictIndex))
{
if(dictIndex == 1){
for(i=0;i<objMainSlt.length;i++){
if(objMainSlt[i].selected){
editedValue += editedValue == "" ? inputvalue : "|" + objMainSlt[i].value;
}else{
editedValue += editedValue == "" ? inputvalue : "|" + objMainSlt[i].value;
}
}
objIptHid.value = editedValue;
}else if(dictIndex == 2 && objMainSlt.selectedIndex >= 0){
for(i=0;i<objSecondSlt.length;i++){
if(objSecondSlt[i].selected){
editedValue += editedValue == "" ? inputvalue : "|" + objSecondSlt[i].value;
}else{
editedValue += editedValue == "" ? inputvalue : "|" + objSecondSlt[i].value;
}
}
var listDDT = objIptHid.value.split("#")
listDDT[objMainSlt.selectedIndex] = editedValue;
objIptHid.value = listDDT.join("#");
}else if(dictIndex == 3 && objMainSlt.selectedIndex >= 0 && objSecondSlt.selectedIndex >= 0){
for(i=0;i<objThirdSlt.length;i++){
if(objThirdSlt[i].selected){
editedValue += editedValue == "" ? inputvalue : "|" + objThirdSlt[i].value;
}else{
editedValue += editedValue == "" ? inputvalue : "|" + objThirdSlt[i].value;
}
}
var listDDT = listThirdDDT[objMainSlt.selectedIndex].split("#");
listDDT[objSecondSlt.selectedIndex] = editedValue;
listThirdDDT[objMainSlt.selectedIndex] = listDDT.join("#");
objIptHid.value = listThirdDDT.join("#");
}
AppendDictList(hidIptId,dictIndex);
}
}
//上下移動數據字典
function MoveDict(ud,hidIptId,dictIndex,sltId) {
var objIptHid = document.getElementById(hidIptId);
var objSlt = document.getElementById(sltId);
var moveIndex = -1;
//切換下拉框中選項的順序
for (i = 0; i < objSlt.length; i++) {
var values = i + (ud);
if (objSlt.item(i).selected && values >= 0 && values < objSlt.length) {
moveIndex = i;
objSlt.item(i).selected = false;
var strHtml = objSlt.item(i).outerHTML;
objSlt.item(i).outerHTML = objSlt.item(values).outerHTML;
objSlt.item(values).outerHTML = strHtml;
objSlt.item(values).selected = true;
break;
}
}
if (dictIndex == 1) {
//移動一級字典時,修改二級字典
if (moveIndex != -1) {
var listSecondDDT = document.getElementById("SecondIptHidden").value.split("#");
var curIndexDict = listSecondDDT[moveIndex];
listSecondDDT[moveIndex] = listSecondDDT[moveIndex + (index)];
listSecondDDT[moveIndex + (index)] = curIndexDict;
document.getElementById("SecondIptHidden").value = listSecondDDT.join("#");
}
//移動一級字典時,修改三級字典
if (moveIndex != -1) {
var curIndexDict = listThirdDDT[moveIndex];
listThirdDDT[moveIndex] = listThirdDDT[moveIndex + (index)];
listThirdDDT[moveIndex + (index)] = curIndexDict;
document.getElementById("ThirdIptHidden").value = listThirdDDT.join("#");
}
//重新初始化二級字典
AppendDictList('SecondIptHidden', 2);
//重新初始化三級字典
AppendDictList('ThirdIptHidden', 3);
} else if(dictIndex == 2){
//移動二級字典時,修改三級字典
if (listThirdDDT[objMainSlt.selectedIndex]) {
var tempDDT = listThirdDDT[objMainSlt.selectedIndex].split("#");
if (moveIndex != -1) {
var curIndexDict = tempDDT[moveIndex];
tempDDT[moveIndex] = tempDDT[moveIndex + (index)];
tempDDT[moveIndex + (index)] = curIndexDict;
}
listThirdDDT[objMainSlt.selectedIndex] = tempDDT.join("#");
objIptHid.value = listThirdDDT.join("#");
}
//重新生成三級字典
AppendDictList('ThirdIptHidden', 3);
}else if(dictIndex == 3){
var tempDDT = listThirdDDT[objMainSlt.selectedIndex].split("#");
//清空當前操作的字典字符數組值,用於重新賦值
tempDDT[objSecondSlt.selectedIndex] = "";
for (i = 0; i < objSlt.length; i++) {
if (i == objSlt.length - 1) {
tempDDT[objSecondSlt.selectedIndex] += objSlt.item(i).value;
} else {
tempDDT[objSecondSlt.selectedIndex] += objSlt.item(i).value + "|";
}
}
//三級字典存儲值
listThirdDDT[objMainSlt.selectedIndex] = tempDDT.join("#");
//傳入後臺的隱藏域賦值
objIptHid.value = listThirdDDT.join("#");
}
}
//刪除數據字典
function DeleteDict(hidIptId,dictIndex,sltId) {
var objIptHid = document.getElementById(hidIptId);
var objSlt = document.getElementById(sltId);
var deleteIndex = "";
//刪除下拉框選中的值
for (i = 0; i < objSlt.length; i++) {
if (objSlt.item(i).selected) {
deleteIndex = i;
objSlt.remove(i);
if (objSlt.length > 0) {
if (i == objSlt.length ) {
objSlt.item(i-1).selected = true;
} else{
objSlt.item(i).selected = true;
}
}
break;
}
}
if (dictIndex == 1) {
//刪除一級字典
var listDT = objIptHid.value.split("|");
listDT.splice(deleteIndex,1);
objIptHid.value = listDT.join("|");
//刪除二級字典
var listSecDT = document.getElementById("SecondIptHidden").value.split("#");
listSecDT.splice(deleteIndex,1);
document.getElementById("SecondIptHidden").value = listSecDT.join("#");
//刪除三級字典
if (listThirdDDT.length) {
listThirdDDT.splice(deleteIndex, 1);
document.getElementById("ThirdIptHidden").value = listThirdDDT.join("#");
}
//重新初始化二級字典
AppendDictList('SecondIptHidden', 2);
//重新初始化三級字典
AppendDictList('ThirdIptHidden', 3);
} else if(dictIndex == 2){
//刪除二級字典
var listSecDT = document.getElementById("SecondIptHidden").value.split("#");
if (objMainSlt.selectedIndex >= 0) {
var tempDT = listSecDT[objMainSlt.selectedIndex].split("|");
tempDT.splice(deleteIndex,1);
listSecDT[objMainSlt.selectedIndex] = tempDT.join("|");
}
document.getElementById("SecondIptHidden").value = listSecDT.join("#");
//刪除三級字典
if (listThirdDDT.length > 0 && objMainSlt.selectedIndex >= 0) {
if(listThirdDDT[objMainSlt.selectedIndex]){
var tempDT = listThirdDDT[objMainSlt.selectedIndex].split("#");
tempDT.splice(deleteIndex, 1);
listThirdDDT[objMainSlt.selectedIndex] = tempDT.join("#");
document.getElementById("ThirdIptHidden").value = listThirdDDT.join("#");
}
}
//重新初始化三級字典
AppendDictList('ThirdIptHidden', 3);
} else if(dictIndex == 3){
//刪除三級字典
if (listThirdDDT.length > 0 && objMainSlt.selectedIndex >= 0) {
var tempDT = listThirdDDT[objMainSlt.selectedIndex].split("#");
var tempDT2 = tempDT[objSecondSlt.selectedIndex].split("|");
tempDT2.splice(deleteIndex, 1);
tempDT[objSecondSlt.selectedIndex] = tempDT2.join("|")
listThirdDDT[objMainSlt.selectedIndex] = tempDT.join("#");
document.getElementById("ThirdIptHidden").value = listThirdDDT.join("#");
}
}
}
//提交事件
function FucSubmit(){
var firstVal = document.getElementById("MainIptHidden").value;
var secondVal = document.getElementById("SecondIptHidden").value;
var thirdVal = document.getElementById("ThirdIptHidden").value;
var firstDT = firstVal.split("|");
var secondDT = secondVal.split("#");
var thirdDT = thirdVal.split("#");
if (firstVal.length <= 0) {
alert("一級字典值不能爲空!")
return false;
} else{
if(secondVal.length > 0 && secondVal.length >= firstDT.length){
for (i=0; i< firstDT.length; i++) {
if(secondDT[i]){
if (secondDT[i] == "") {
alert("一級字典中第 " + (i+1) + " 項下的二級字典值不能爲空!")
return false;
}
}
else{
alert("一級字典中第 " + (i+1) + " 項下的二級字典值不能爲空!")
return false;
}
}
}else{
alert("二級字典值不能爲空!")
return false;
}
}
//三級字典檢查
if(thirdVal.length > 0){
var tempDT2 = [];
var k = 0;
for (var i = 0; i < secondDT.length; i++) {
var tempList = secondDT[i].split('|');
for (var j = 0; j < tempList.length; j++) {
tempDT2[k] = tempList[j];
k++;
}
}
for (var i = 0; i < thirdDT.length; i++) {
if (thirdDT.length != tempDT2.length || thirdDT[i] == "") {
alert("三級字典值不能爲空!");
return false;
}
}
}else{
alert("三級字典值不能爲空!")
return false;
}
document.getElementById("dictData").innerHTML = firstVal + "$" + secondVal + "$" + thirdVal;
$("#prodSelect,#prodSltDiv").css("display","")
}
//一級字典下拉框對象
var objOneSlt = document.getElementById('OneSlt');
//二級字典下拉框對象
var objTwoSlt = document.getElementById('TwoSlt');
//三級字典下拉框對象
var objThreeSlt = document.getElementById('ThreeSlt');
//展示事件
//三級下拉框初始化
function AppendDctMain(){
objOneSlt.innerHTML = '';
objTwoSlt.innerHTML = '';
objThreeSlt.innerHTML = '';
$("div").remove(".slt-main");
var dtData = document.getElementById("dictData").innerHTML;
var strDict = dtData.split('$');
var strDictFirst = strDict[0].split('|');
var strDictSecond = strDict[1].split('#');
for (let i =0; i <strDictFirst.length; i++)
{
var opt = document.createElement("OPTION");
if (strDictSecond[i])
{
opt.value = strDictSecond[i];
objOneSlt.appendChild(opt);
opt.innerHTML = strDictFirst[i];
}
}
if (objOneSlt.length > 0)
{
objOneSlt.item(0).selected = true;
creatSelect("OneSlt","AppendDctSecond");
AppendDctSecond();
}
}
//三級下拉框二級字典初始化
function AppendDctSecond() {
var dtData = document.getElementById("dictData").innerHTML;
var strDict = dtData.split('$');
objTwoSlt.innerHTML = '';
$("#TwoSlt").next().remove(".slt-main");
if (strDict.length > 0) {
var secDct = strDict[1].split('#');
//獲取三級字典
var preThirdDct = strDict[2].split('#');
var secDctIn = [];
var thirdDct = [];
var alength = 0;
for (var i = 0; i < secDct.length; i++) {
alength = secDct[i].split('|').length;
secDctIn[i] = preThirdDct.splice(0, alength);
thirdDct[i] = secDctIn[i].join('#');
}
var thirdDctChose = thirdDct[objOneSlt.selectedIndex].split('#');
var selectedDictValue = secDct[objOneSlt.selectedIndex].split('|');
var opt = document.createElement("OPTION");
opt.innerHTML = "全部";
opt.value = "全部";
objTwoSlt.appendChild(opt);
for (i = 0; i < selectedDictValue.length; i++)
{
var opt = document.createElement("OPTION");
opt.value = thirdDctChose[i];
if (opt.value.length > 0)
{
opt.innerHTML = selectedDictValue[i];
objTwoSlt.appendChild(opt);
}
}
if (objTwoSlt.length > 0)
{
objTwoSlt.item(0).selected = true;
creatSelect("TwoSlt","AppendDctThird");
AppendDctThird();
}
}
}
//三級下拉框三級字典初始化
function AppendDctThird() {
var dtData = document.getElementById("dictData").innerHTML;
var strDict = dtData.split('$');
objThreeSlt.innerHTML = '';
$("#ThreeSlt").next().remove(".slt-main");
if (objTwoSlt.value != "全部") {
//獲取三級字典
var secDct = strDict[1].split('#');
var preThirdDct = strDict[2].split('#');
var secDctIn = [];
var thirdDct = [];
var alength = 0;
for (var i = 0; i < secDct.length; i++) {
alength = secDct[i].split('|').length;
secDctIn[i] = preThirdDct.splice(0, alength);
thirdDct[i] = secDctIn[i].join('#');
}
var thirdDctChose = thirdDct[objOneSlt.selectedIndex].split('#');
var sltIndex = objTwoSlt.selectedIndex-1;
var selectedDictValue = thirdDctChose[sltIndex].split('|');
var opt = document.createElement("OPTION");
opt.innerHTML = "全部";
opt.value = "全部";
objThreeSlt.appendChild(opt);
for (i = 0; i < selectedDictValue.length; i++)
{
var opt = document.createElement("OPTION");
opt.value = selectedDictValue[i];
if (opt.value.length > 0)
{
objThreeSlt.appendChild(opt);
opt.innerHTML = selectedDictValue[i];
}
}
if (objThreeSlt.length > 0)
{
objThreeSlt.item(0).selected = true;
}
}
creatSelect("ThreeSlt");
}
</script>
html中引用的本地js和css文件是一個對下拉框的美化,方法creatSelect()爲美化下拉框的調用方法。
customize_select.css
* {
margin: 0;
list-style: none;
padding: 0;
}
body {
font-family: Helvetica, arial, sans-serif;
}
.slt-main{
background-color: #FFFFFF;
border: 1px solid #4682B4;
box-shadow: 0 0 2px #4682B4;
border-radius: 5px;
font-size: 17px;
height: 30px;
position: relative;
width: 200px;
-webkit-user-select: none;
-moz-user-select: none;
-khtml-user-select: none;
-ms-user-select: none;
}
.slt-arrow{
border-top: 7px solid #4682B4;
border-left: 7px solid transparent;
border-right: 7px solid transparent;
cursor: pointer;
height: 0px;
position: absolute;
top: 12px;
right: 10px;
width: 0px;
z-index: 7;
}
.slt-arrow.reverse {
border-top: 7px solid transparent;
border-bottom: 7px solid #4682B4;
top: 4px;
}
.slt-set{
background-color: #FFFFFF;
border-radius: 5px;
color: #4682B4;
cursor: pointer;
height: 27px;
line-height: 27px;
overflow: hidden;
position: relative;
padding: 0 35px 0 15px;
width: 150px;
z-index: 5;
}
.slt-block{
background-color: #FFFFFF;
border-left: 1px solid #4682B4;
border-right: 1px solid #4682B4;
border-bottom: 1px solid #4682B4;
border-radius: 5px;
box-shadow: 0 0 2px #4682B4;
left: -1px;
line-height: 20px;
position: absolute;
top: 32px;
width: 200px;
}
.slt-list{
cursor: pointer;
margin: 15px 0 7px;
list-style-type: none;
}
.slt-item{
color: #4682B4;
padding: 6px 15px;
}
li.slt-item.active{
background-color: rgb(45, 178, 255);
color: #FFFFFF;
}
.slt-item:hover{
background-color: rgb(45, 178, 255);
color: #FFFFFF;
}
ul.slt-list::-webkit-scrollbar {
width: 12px;
}
ul.slt-list::-webkit-scrollbar-thumb {
border-radius: 10px;
-webkit-box-shadow: inset 0 0 1px rgba(0,0,0,0.5);
}
customize_select.js:
var num = 0;
function creatSelect(strId,relatedFunc) {
var objSlt = $("#" + strId);
objSlt.css("display", "");
var strSltDefault = '<div id="creatSlt' + num + '" class="slt-main" style="' +objSlt.attr("style") + '"><div class="slt-arrow"></div><div class="slt-set"></div><div class="slt-block" style="display: none;"><ul class="slt-list" style="height: 200px; overflow: auto;"></ul></div><div>'
objSlt.css("display", "none");
objSlt.after(strSltDefault);
var objSltOptList = objSlt.find("option");
var objCreat = $("#creatSlt" + num);
var strLi = "";
for(let i = 0; i < objSltOptList.length; i++) {
var objLi = $(objSltOptList[i]);
if(objLi.prop("selected") || objLi.attr("selected")) {
strLi += '<li class="slt-item active" value="' + objLi.attr("value") + '">' + objLi.text() + '</li>'
objSlt.next("div").find(".slt-set").text(objLi.text());
} else {
strLi += '<li class="slt-item" value="' + objLi.attr("value") + '">' + objLi.text() + '</li>'
}
}
objSlt.next("div").find(".slt-list").append(strLi);
$("#creatSlt" + num).bind("click", function() {
$(".slt-block").css("display", "none");
$(".slt-arrow").removeClass("reverse");
if($(this).find(".slt-block").css("display") == "none") {
$(this).find(".slt-block").css("display", "block")
$(this).find(".slt-arrow").addClass("reverse");
} else {
$(this).find(".slt-block").css("display", "none")
$(this).find(".slt-arrow").removeClass("reverse");
}
});
objCreat.find(".slt-block").bind("click", function(e) {
var src;
if(e.target) {
src = $(e.target);
} else {
src = $(e.srcElement);
}
objCreat.find(".slt-set").text(src.text());
objCreat.find(".slt-list .active").removeClass("active");
src.addClass("active");
objSlt.get(0).selectedIndex = src.index();
if(relatedFunc){
eval(relatedFunc+"()");
}
});
num++;
}
$(document).bind("click",
function(e) {
if(!$(e.target).is(".slt-set") && !$(e.target).is(".slt-arrow") && !$(e.target).is(".slt-main")) {
$(".slt-block").css("display", "none")
$(".slt-arrow").removeClass("reverse");
}
}
);