锁定老帖子 主题:js 实现下拉列表的重复利用
精华帖 (0) :: 良好帖 (0) :: 新手帖 (16) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-08-21
<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> 这样就简单多了 可能到处重复利用了 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-08-21
不太明白为什么要用JS来生成,用原始的<select>有什么缺点呢,麻烦楼主解释一下,谢谢。
|
|
返回顶楼 | |
发表时间: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> |
|
返回顶楼 | |
发表时间:2009-08-22
有道理..
学习了. |
|
返回顶楼 | |
发表时间:2009-08-22
楼主的代码虽然在一定程度上达到了重复利用,只可惜封装不彻底,几个函数之间的代码拷贝率还是很高,二楼的代码封装更彻底,传递参数格式为对象(或者说是json),代码得到了优化 |
|
返回顶楼 | |
发表时间:2009-08-22
向高手们致敬!
|
|
返回顶楼 | |
发表时间:2009-08-22
最后修改:2009-08-22
c["id"] && (_select.id = c["id"])
后面的括号有点点囧. |
|
返回顶楼 | |
发表时间:2009-08-22
02221021 写道 .......
没办法“=”的优先级低于“&&” |
|
返回顶楼 | |
发表时间:2009-08-22
呵呵,是啊.
for (var i =0, d; d = ['id', 'name', 'onchange'][i++]) { c[d] && (_select[d] = c[d]); } 这样也可以 |
|
返回顶楼 | |
发表时间:2009-08-22
02221021 写道
呵呵,是啊.
for (var i =0, d; d = ['id', 'name', 'onchange'][i++]) { c[d] && (_select[d] = c[d]); } 这样也可以 这个循环也有点囧,哈哈
|
|
返回顶楼 | |