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" );  //

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值