七分地
soncy的七分责任田,种点瓜果蔬菜和杂草
javascript+css模拟下拉框(更新)
发表于 2010年03月13日
1,489次阅读
前面写了一个javascript+css模拟下拉框,但是代码太难看了,所以重写了一下代码:
- Function.prototype.method = function(name,func){
- if(!this.prototype[name]){
- this.prototype[name] = func;
- }
- };
- function CsSelect(_data,_element){
- this._element = _element;
- if(typeof _element == "string"){
- this._element = document.getElementById(_element);
- }
- this._value = "";
- this.data = _data;
- this.change = function(){};//下拉框选取值更改,外部重定义
- this._closeEventStatus = false;
- this._selectEventStatus = false;
- this._create();
- }
- //创建下拉框DOM
- CsSelect.method("_create",function(){
- var self = this;
- if(typeof this.data == "undefined" || this.data.length < 1) return;
- var _htmlArr = [];
- this._CsSelect = document.createElement("div");
- this._CsSelect.className = "csSelect";
- this._CsStitle = document.createElement("div");
- this._CsStitle.className = "csStitle";
- this._CsStitle.innerHTML = this.data[0][1];
- this._element.value = this.data[0][0];
- this._CsSelect.appendChild(this._CsStitle);
- this._CsSlist = document.createElement("ul");
- this._CsSlist.className = "csSlist";
- for(var i =0;i < self.data.length;i++){
- var _tempData = self.data[i];
- var _optValue = _tempData[0];//获取value值
- var _optText = _tempData[1];//获取text值
- _htmlArr.push('<li><a href="#" value="');
- _htmlArr.push(_optValue);
- _htmlArr.push('">');
- _htmlArr.push(_optText);
- _htmlArr.push('</a></li>');
- }
- this._CsSlist.innerHTML = _htmlArr.join("");
- this._CsSelect.appendChild(this._CsSlist);
- this._element.style.display = "none";
- this._insertAfter(this._CsSelect,this._element);
- //事件注册
- self._CsStitle.onclick = this._selfClick();
- });
- //点击展开和收起
- CsSelect.method("_selfClick",function(){
- var self = this;
- return function(){
- var _CsSlist = self._CsSlist;
- var _Clist = document.getElementsByTagName("ul");
- for(var i = 0;i < _Clist.length;i++){
- if(_Clist[i].className.indexOf("csSlist") > -1 && _Clist[i] != self._CsSlist){
- _Clist[i].style.display = "none";
- }
- }
- if(_CsSlist.style.display != "block"){
- _CsSlist.style.visibility = "hidden";
- _CsSlist.style.display = "block";
- if(_CsSlist.offsetHeight > 200){
- _CsSlist.style.height = "200px";
- }
- _CsSlist.style.visibility = "inherit";
- }else{
- _CsSlist.style.display = "none";
- _CsSlist.style.height = "auto";
- }
- self._select();
- self._closeEvent();
- }
- });
- //选择下拉框内容
- CsSelect.method("_select",function(){
- if(this._selectEventStatus) return;
- var self = this;
- var _csList = this._CsSlist.getElementsByTagName("a");
- for(var i = 0;i < _csList.length;i ++){
- _csList[i].onclick = function(event){
- var ev = event || window.event;
- var el = ev.srcElement || ev.target;
- self._CsStitle.innerHTML = el.innerHTML;
- self._element.value = el.getAttribute("value");
- self._CsSlist.style.display = "none";
- self.change();
- return false;
- }
- }
- this._selectEventStatus = true;
- });
- CsSelect.method("_insertAfter",function(newElement,targetElement){
- var parent = targetElement.parentNode;
- if(parent.lastChild == targetElement){
- parent.appendChild(newElement);
- }else{
- parent.insertBefore(newElement,targetElement.nextSibling);
- }
- });
- //隐藏组件
- CsSelect.method("hide",function(){
- this._CsSelect.style.display = "none";
- });
- //显示组件
- CsSelect.method("show",function(){
- this._CsSelect.style.display = "block";
- });
- //设置下拉框默认显示项
- CsSelect.method("setValue",function(value){
- var _idx = 0;
- for(var i = 0;i < this.data.length;i++){
- if(this.data[i].join("").indexOf(value) > -1){
- _idx = i;
- }
- }
- this._CsStitle.innerHTML = this.data[_idx][1];
- this._element.value = this.data[_idx][0];
- });
- //获取下拉框当前值
- CsSelect.method("getValue",function(){
- return this._element.value;
- });
- //点击除下拉框的其他地方,收起下拉框
- CsSelect.method("_closeEvent",function(){
- if(this._closeEventStatus) return;
- if(window.addEventListener){
- document.addEventListener("click" , function(event){
- var ev = event || window.event;
- var el = ev.srcElement || ev.target;
- if(el.className == "csStitle") return;
- var _Clist = document.getElementsByTagName("ul");
- for(var i = 0;i < _Clist.length;i++){
- if(_Clist[i].className.indexOf("csSlist") > -1){
- _Clist[i].style.display = "none";
- }
- }
- },false);
- }else{
- document.attachEvent("onclick" , function(event){
- var ev = event || window.event;
- var el = ev.srcElement || ev.target;
- if(el.className == "csStitle") return;
- var _Clist = document.getElementsByTagName("ul");
- for(var i = 0;i < _Clist.length;i++){
- if(_Clist[i].className.indexOf("csSlist") > -1){
- _Clist[i].style.display = "none";
- }
- }
- });
- }
- this._closeEventStatus = true;
- });
感谢您的浏览,如果您喜欢本站,可以通过Rss订阅本站,如需转载,请注明出处,谢谢!
发表评论

坐个沙发!
[回复]