zoukankan      html  css  js  c++  java
  • 下拉列表选择控件, 用于替换原生的 select 控件

    <!DOCTYPE html>
    <html>
    <head>
    <style>
        body{     
            font: 12px "宋体",Arial; 
        } 
          
      
        /* list start*/
        .conditionBox{  
            position:relative;
            display:inline-block;
            *display: inline;
            *zoom:1;
            padding:0 20px 0 10px;
            margin:6px 0px 5px 5px;
            width:70px;
            height:22px;
            line-height:22px;
    
            background:url(http://images.cnblogs.com/cnblogs_com/ecalf/431722/o_button.gif) no-repeat 0 -97px;    
            cursor:pointer;
            color:#666;
        }
        .filterList{
            position:absolute;
            left:0;
            top:21px;
            display:none;
            border:1px solid #d2d2d2;
            background:#FFF;
            width:98px;
            min-height:30px;
            overflow:hidden;
        }
        .filterList, .filterList li { 
            margin: 0; padding: 0; list-style: none outside none; 
        }
        .filterList li{
            height:22px;
            line-height:22px;
            margin:0;
            padding:0 5px;
            float:none;
            width:88px;
            color:#333;
        }
        .filterList li:hover{
            color:#ffffff;
            background:#666666;
        }
        .filterList .selected{
            background:#888888;
            color:#ffffff;
        }
        /* list end*/
    </style>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
    <script>
    function List(opstions){   
        this.container=null;
        this.dom=null;
        this.listSheet=null;
        this.locked = false;
        this.items=[];
        this.beforeCallbacks=[];
        this.afterCallbacks=[];
    
        this.init(opstions);
    }
    List.prototype={
        init:function(opstions){
            var host = this;
            for(var key in opstions){
                host[key] = opstions[key];
            }
    
            if(typeof(opstions.container)=="string"){
                host.container = document.getElementById(opstions.container);
            }
            
            host.dom = document.createElement("div");
            host.dom.className = "conditionBox";
            host.listSheet = document.createElement("ul");
            host.listSheet.className = "filterList";
    
            host.dom.appendChild(document.createElement("span"));
            host.dom.appendChild(host.listSheet);
            host.container.appendChild(host.dom);
    
            $(host.dom).hover(function(){
                $(this).children("ul").fadeIn(200);
            },function(){
                $(this).children("ul").fadeOut(200);
            });
    
            $(host.listSheet).delegate("li","click",function(e){            
                var itemId = $(this).attr("itemId");
                var stopSelected=false;
                $.each(host.beforeCallbacks||[],function(index,f){
                    if(f.call(host)===false){
                        stopSelected=true;
                    };
                });
                if(stopSelected){
                    return host;
                }
    
                host.selectItem(itemId);
    
                $.each(host.afterCallbacks||[],function(index,f){
                    f.call(host);
                });
    
            });
    
            return host;
        },
        setItems:function(arr){
            var host = this;
            host.items = arr;
    
            var listSheet = $(host.listSheet).empty();
            var defaultItem;
            $.each(arr,function(index,itemData){
                listSheet.append(host.createListItem(itemData));
                if(itemData.selected){
                        defaultItem = itemData;
                }
            });
    
            defaultItem && host.selectItem(defaultItem.itemId);        
            return host;
        },
        getItems:function(){
            var host=this;      
            return host.items;
        },
        createListItem:function(itemData){
            var host = this;
             var listItem = $('<li></li>');
                $.each(itemData,function(key,val){
                    switch(key){
                        case 'icon':
                            listItem.prepend($('<img>').attr({src:val,height:16 ,16 ,border:"0px"})
                                .css({'margin':"1px 2px 1px 0px",'vertical-align':'middle'}));
                            break;                  
                        case 'caption':
                            listItem.append('<span>'+val+'</span>');
                            break;
                        default:
                            listItem.attr(key,val);
                            break;
                    }
                    if(!('caption' in itemData)){
                        listItem.text(itemData.value);
                    }
                    
                });
    
            return listItem;
        },
        insertItems:function(items,index){
            var host = this;
            var listSheet = $(host.listSheet);
            var lis =  listSheet.find("li");
            if(Object.prototype.toString.call(items)!="[object Array]"){
                items = [items];
            }
            index = parseInt(index);
            if(!lis.length||index<0){
                index = 0;
            }else if(isNaN(index)||index>lis.length-1){
                index = lis.length-1;
            }
    
            var baseItem = lis.eq(index);  
            $.each(items||[],function(i,itemData){
                baseItem.before(host.createListItem(itemData));
            });
    
            Array.prototype.splice.apply(host.items,[index,0].concat(items));
            return host;
        },   
        clearItems:function(){
            var host = this;
            host.items=[];
            $(this.dom).find("ul").empty();
            return host;
        },  
        removeItems:function(itemids){
            var host = this;
            var lis = $(this.dom).find("li");
            var idsHash={};
            if(Object.prototype.toString.call(itemids)!="[object Array]"){
                itemids = [itemids];
            }
            $.each(itemids,function(index,val){
                idsHash[val]=1;
            });
            $.each(lis,function(index,liItem){
                liItem = $(liItem);
                if(idsHash[liItem.attr("itemId")]){
                    liItem.remove();
                    host.items.splice(index,1);             
                }
            });
            return host;
        },
        getCurrentItem:function(){
            var host = this;
            var lis = $(this.dom).find("li");
            var item = {};
            $.each(lis,function(index,liItem){
                if($(liItem).hasClass('selected')){
                    item = host.items[index];
                    return false;
                }
            });
            return item;
        },
        selectItem:function(itemId){
            var host = this;        
            var listSheet = $(host.listSheet);
            var item = listSheet.find("li[itemId='"+itemId+"']");        
            item.attr("class","selected")
                .siblings(".selected").removeAttr("class");
            listSheet.hide().prev().html(item.html());
            host.value = item.attr("value");
            return host;
        },
        setValue:function(val){
            var host = this;
            host.value = val;
            var listSheet =  $(host.listSheet);
            var liItem = listSheet.find("li[value='"+val+"']");
            if(liItem.length){
                host.selectItem(liItem.eq(0).attr("itemId"));
            }else{
                listSheet.hide().prev().empty();
            }
    
            return host;
        },
        getValue:function(){
            var host = this;
            return host.value;
        },
        setBeforeCallback:function(f){//设置选择选操作前的回调函数,返回 false 将阻止选择操作
            var host = this;
            if(typeof(f)=="function"){
                host.beforeCallbacks.push(f);
            }        
            return host;
        },
        setAfterCallback:function(f){
            var host = this;
            if(typeof(f)=="function"){
                host.afterCallbacks.push(f);
            }    
            return host;
        }
    }
      
    $(document).ready(function(){
        var mylist = window.mylist = new List({container:'listBox',afterCallbacks:[function(){ console.log(this.value);}]})
        .setItems([
            {itemId:1,value:100,caption:'hat',icon:"http://images.cnblogs.com/cnblogs_com/ecalf/431722/o_13135493700855.gif"},
            {itemId:2,value:200,caption:'man',icon:"http://images.cnblogs.com/cnblogs_com/ecalf/431722/o_13188535899238.jpg",selected:true},
            {itemId:3,value:300,caption:'robot',icon:"http://images.cnblogs.com/cnblogs_com/ecalf/431722/o_13188536660394.gif"},
            {itemId:'x',value:400,caption:'bottle',icon:"http://images.cnblogs.com/cnblogs_com/ecalf/431722/o_13188536897653.gif"}
            ]); 
    });
      
      
      
    </script>
    </head>
      
      
    <body>  
    <div id="listBox" style="border:1px solid black; 500px; height:80px; padding:20px;">   
    </div>
    </body>
    </html>

  • 相关阅读:
    cocos2d-x类型转换(CCstring int string char UTF-8互转)
    cocos2d-x 实心圆
    CCLabelTTF的多行显示(仅限中文)
    cocos2d-x 弹窗
    cocos2d-x 画线
    cocos2d-x 利用CCLabelTTF制作文字描边与阴影效果的实现方法
    cocos2d-x 背景色修改
    cocos2d-x 中文乱码问题
    HelloWorld.exe 中的 0x0f9265f6 (libcocos2d.dll) 处有未经处理的异常: 0xC0000005: 读取位置 0x00000038 时发生访问冲突
    error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
  • 原文地址:https://www.cnblogs.com/ecalf/p/2810399.html
Copyright © 2011-2022 走看看