论坛首页 Web前端技术论坛

js 实现下拉列表的重复利用

浏览 16858 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (16) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-08-21  
在很多地方都会用到 一些常用的下拉框   如民族 、生肖、学历、血型 等等     所以我们就有必要用javaScript对这些进行一个简单的封装  如果很次都在   html 中编写这样的代码
<select >  
  <option ></option>  
  <option ></option> 
  <option ></option> 
</select> 

无疑是失败的  并且不好实现动态的实现选中项 对于这样的考虑      
我们对这些进行一个简单的 javaScript 代码编写
createSelect.js 中的代码:
var arrayNation=new Array(
    '汉族','蒙古族','彝族','侗族','哈萨克族',  
    '畲族','纳西族','仫佬族','仡佬族','怒族','保安族',     
    '鄂伦春族','回族','壮族','瑶族','傣族','高山族',     
    '景颇族','羌族','锡伯族','乌孜别克族','裕固族','赫哲族',    
    '藏族','布依族','白族','黎族','拉祜族','柯尔克孜族','布朗族',    
    '阿昌族','俄罗斯族','京族','门巴族','维吾尔族','朝鲜族',  
    '土家族','傈僳族','水族','土族','撒拉族','普米族','鄂温克族',  
    '塔塔尔族','珞巴族','苗族','满族','哈尼族','佤族','东乡族',   
    '达斡尔族','毛南族','塔吉克族','德昂族','独龙族','基诺族'); 

var arrayShengXiao=new Array(
    '鼠','牛','虎','兔','蛇',
    '蛇','马','羊','猴','鸡','狗','猪'); 

var arrayDegree=new Array(
    '小学','初中','高中','中专',
    '大专','本科','硕士','博士');

 /** *创建民族选择框 */ 
function createNationSelect(name,str) { 
    document.write("<select id='selectNation'></select>"); 
    var select=document.getElementById("selectNation"); 
    for(var i=0;i<arrayNation.length;i=i+1) {  
        select.name=name;  
        var opt=document.createElement("option");  
        opt.value=arrayNation;  
        opt.innerText=arrayNation;  
        if(arrayNation==str)   {  
            opt.selected='true';  
        }   
        select.appendChild(opt);
   }
 } 

/** *创建生肖选择框 */ 
function createShengXiaoSelect(name,str) { 
    document.write("<select id='selectShengXiao'></select>");
    var select=document.getElementById("selectShengXiao"); 
    for(var i=0;i<arrayShengXiao.length;i=i+1) { 
        select.name=name;   
        var opt=document.createElement("option");  
        opt.value=arrayShengXiao; 
        opt.innerText=arrayShengXiao;  
        if(arrayShengXiao==str)   {  
            opt.selected='true';   
        }   
        select.appendChild(opt); 
   } 
} 
/** *创建学历选择框 */
function createDegreeSelect(name,str) {
    document.write("<select id='selectDegree'></select>"); 
    var select=document.getElementById("selectDegree");
    for(var i=0;i<arrayDegree.length;i=i+1) {   
        select.name=name;  
        var opt=document.createElement("option");   
        opt.value=arrayDegree;   
        opt.innerText=arrayDegree; 
        if(arrayDegree==str)   { 
            opt.selected='true';  
        }   
        select.appendChild(opt); 
    } 
} 


然后在html文件我们就可以这样使用了
<SCRIPT src="createSelect.js" language="javascript"></SCRIPT> 
<script type="text/javascript">      
     createNationSelect("userNation"); 
</script> 
  

这样就很容易就创建一个 name="userNation" 的下拉框  
而且还很容易就实现了 指定默认选中项
<script type="text/javascript">         
  createNationSelect("userNation","苗族"); </script> 

如果要显示一个用户有民族的话
<script type="text/javascript">      
     createNationSelect("userNation","${user.userNation}");
 </script> 


这样就简单多了
可能到处重复利用了
   发表时间:2009-08-21  
不太明白为什么要用JS来生成,用原始的<select>有什么缺点呢,麻烦楼主解释一下,谢谢。
0 请登录后投票
   发表时间:2009-08-21   最后修改:2009-08-21

可以优化一下代码:

<div id="nation">民族:</div>
<div id="shengxiao">生肖:</div>
<div id="degree">学位:</div>
<div id="self">自定义:</div>
<script>	
function createSelect(c){
	var _inner = {
		"nation" : ['汉族','蒙古族','彝族','侗族','哈萨克族', 
			'畲族','纳西族','仫佬族','仡佬族','怒族','保安族', 
			'鄂伦春族','回族','壮族','瑶族','傣族','高山族', 
			'景颇族','羌族','锡伯族','乌孜别克族','裕固族','赫哲族', 
			'藏族','布依族','白族','黎族','拉祜族','柯尔克孜族','布朗族', 
			'阿昌族','俄罗斯族','京族','门巴族','维吾尔族','朝鲜族', 
			'土家族','傈僳族','水族','土族','撒拉族','普米族','鄂温克族', 
			'塔塔尔族','珞巴族','苗族','满族','哈尼族','佤族','东乡族', 
			'达斡尔族','毛南族','塔吉克族','德昂族','独龙族','基诺族'],
		"shengxiao" : ['鼠','牛','虎','兔','蛇','蛇','马','羊','猴','鸡','狗','猪'],
		"degree" : ['小学','初中','高中','中专','大专','本科','硕士','博士']
	}
	var _array = c["array"] || _inner[c["type"]];
	var _select = document.createElement("select");
	for(var i=0; i < _array.length; i++){
		_select.options[i] = new Option(_array[i], _array[i]);
		_array[i] == c["selected"] && (_select.options[i].selected = true);
	}
	c["id"] && (_select.id = c["id"]);
	c["name"] && (_select.name = c["name"]);
	c["onchange"] && (_select.onchange = c["onchange"]);
	return _select;
}

//应用
function $(id){return document.getElementById(id);}
$("nation").appendChild(createSelect({type : "nation", selected : "蒙古族",onchange : function(){alert(this.value)}}));
$("shengxiao").appendChild(createSelect({type : "shengxiao", selected : "虎", id : "shengxiao"}));
$("degree").appendChild(createSelect({type : "degree", selected : "本科", name : "degree"}));
$("self").appendChild(createSelect({array : ["你","我","他"], selected : "他"}));
</script>
 
0 请登录后投票
   发表时间:2009-08-22  
有道理..
学习了.
0 请登录后投票
   发表时间:2009-08-22  

楼主的代码虽然在一定程度上达到了重复利用,只可惜封装不彻底,几个函数之间的代码拷贝率还是很高,二楼的代码封装更彻底,传递参数格式为对象(或者说是json),代码得到了优化

0 请登录后投票
   发表时间:2009-08-22  
向高手们致敬!
0 请登录后投票
   发表时间:2009-08-22   最后修改:2009-08-22
c["id"] && (_select.id = c["id"])

后面的括号有点点囧.
0 请登录后投票
   发表时间:2009-08-22  
02221021 写道
.......

没办法“=”的优先级低于“&&”
0 请登录后投票
   发表时间:2009-08-22  
呵呵,是啊.

for (var i =0, d; d = ['id', 'name', 'onchange'][i++]) {
     c[d] && (_select[d] = c[d]);
}

这样也可以
0 请登录后投票
   发表时间:2009-08-22  
02221021 写道
呵呵,是啊.

for (var i =0, d; d = ['id', 'name', 'onchange'][i++]) {
     c[d] && (_select[d] = c[d]);
}

这样也可以

这个循环也有点囧,哈哈

 

0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics