Select表单控件的多选级联技术

Select表单控件的多选级联技术

需求提出这个需求非常普遍,一般的B/S系统上都会有此类型的需求。举一个很典型的例子:在目前的一些技术论坛系统中,你发表一封帖子,而帖子可能包含很多种分类。

如:按语言分,则是java类;按行业分,则属于bank,等等…….因此在设计界面时,需求就要求你能选择多个分类,而且已选的分类不能再选。

解决方案:实现这个功能其实并不难,在表单里面有这样的控件<select name=”select1” multiple="true" size=”10”>,用户就可以直接在上面选择自己要的分类就行。但是这个控件只能定义固定高度,而且当数据库中分类很多时,用户选择起来很费劲,而且多选时,必须按住Ctrl键。

基于这种方案的不足,同时针对这个应用需求,本人重新设计一个新的方案,则用两个select表单控件级联,则可以满足用户需求,且非常好操作。

新方案思想:上面方案之所以摒弃,因为不能满足易操作性,对于B/S系统来说,易操作性是一项非常重要的指标。

新方案实现这个功能采用三个表单控件:

1.      一个支持多选的下拉菜单select

2.      一个支持单选的下拉菜单select;

3.      一个删除按钮button

Jsp页面代码:

首先用javaScript定义一个二维数组;

 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<title>select级联</title>

</head>

<script language="javascript">

 

var allTypes = new Array();

  for(var i =0;i<4;i++ ){

var mainType = new Array();

  mainType[0] = "大分"+i;

  mainType[1] = i; //大分ID

   var subType_list =  new  Array();

  mainType[2] =  subType_list;

  for(var j= 0;j<4;j++){ 

   var subType = new Array();

    subType[0]  = "小分"+i+""+j;

subType[1] =i+""+j;

subType_list[j] = subType;

}

    allTypes[i] = mainType;

}

 

 

 

function  addFileType(option){

 

 var select1 = document.getElementById("select_types");

 var  option_new = document.createElement("Option"); 

 

for(var m = 0;m < allTypes.length; m++ ){

  var element = allTypes[m];

  

   var  subTypeList =  element[2];

 

 for(var n = 0;n < subTypeList.length; n++ ){

 

 if(option.value == subTypeList[n][1]){

  option_new.text = element[0]+"-"+subTypeList[n][0];

 break;

}

 }

 

}

  option_new.value = option.value;

  var addFlag = 0;

  if(select1.options.length<1){

   select1.options.add(option_new);

  }else{

 

    for(var k = 0; k < select1.options.length;k++){

  

    if(option_new.value.substring(0,1) == select1.options[k].value.substring(0,1)){

      addFlag = 1;  

      alert('你已经选择了此大分'); 

      break;

    }

   

  }

  if(addFlag == 0){

     select1.options.add(option_new);

     return;

     }

 

  }

 

}

 

 

 function  deleteOption(select_element){

 var select1 = document.getElementById(select_element);

 if(select1.options.length <1)

 { return false;

 }

 

select1.remove(select1.selectedIndex);

select1.selectedIndex = select1.options.length-1;

}

 

</script>

 

<body><select id="select_types" name="select_types" multiple="true" size="6"  >

    <optgroup    label="         -----作品已有-----       " ></optgroup>

</select>                                                                      <input type="button" class="btn" name="Submit2" value="&gt;&gt;"  onClick="deleteOption('select_types')" >

                            <!-- ***********示所有的作品***************** -->

                <select name="select2"  οnchange="addFileType(this);">

                                                                      <option label="---请选择作品分---"  disabled="disabled" selected></option>

    <optgroup label="大分0" >

<option value="00">小分00</option>

<option value="01">小分01</option>

<option value="02">小分02</option>

<option value="03">小分03</option>

</ optgroup>

<optgroup label="大分1" >

<option value="10">小分10</option>

<option value="11">小分11</option>

<option value="12">小分12</option>

<option value="13">小分13</option>

</ optgroup>

<optgroup label="大分2" >

<option value="20">小分20</option>

<option value="21">小分21</option>

<option value="22">小分22</option>

<option value="23">小分23</option>

</ optgroup>

<optgroup label="大分3" >

<option value="30">小分30</option>

<option value="31">小分31</option>

<option value="32">小分32</option>

<option value="33">小分33</option>

</ optgroup>

              </select>

</body>

</html>

 

最后还要注意一个问题,select多选控件在提交表单时只会提交已选上的所有值,因此在点击提交按钮时,应该加上这样的js语句:

var allType = document.getElementById("select_types");  // 提交之前,把作品型控件全部置上状

    for(var k = 0;k<allType.options.length;k++){

    allType.options[k].selected = true;

    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值