梦幻之旅

DEBUG - 天道酬勤

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  671 随笔 :: 6 文章 :: 256 评论 :: 0 Trackbacks

css

/** 惠万鹏(2010-8-13) */


ul, ol, li 
{
    list-style
:none;
}

ul, ol, li, img, dl, dt, dd 
{
    margin
: 0;
    padding
: 0;
    border
: 0;
}

div.selectbox-wrapper 
{
    border-right
: #bfbfbf 1px solid; 
    border-top
: #bfbfbf 0px solid; 
    margin-top
: -3px; 
    border-left
: #bfbfbf 1px solid; 
    width
: 107px; 
    border-bottom
: #bfbfbf 1px solid; 
    position
: absolute; 
    background-color
: #fff; 
    text-align
: left
 
}

div.selectbox-wrapper ul li.selected 
{
        background-color
: #bfbfbf;
}

div.selectbox-wrapper ul li.current 
{
    color
: #fff; 
    background-color
: #9a9a9a
}

div.selectbox-wrapper ul li 
{
    padding-right
: 3px; 
    padding-left
: 3px; 
    padding-bottom
: 3px; 
    width
: 102px; 
    cursor
: pointer; 
    line-height
: 20px; 
    padding-top
: 3px
}

.selectbox 
{ 
    border
:none;  
    display
: block; 
    padding-left
:4px; 
    width
: 130px; 
    cursor
: pointer; 
    padding-top
:5px; 
    height
: 19px; 
    background
:url(/js/select/select.gif) no-repeat;
}

js
jQuery.fn.extend({
    selectbox: 
function(options) {
        
return this.each(function() {
            
new jQuery.SelectBox(this, options);
        }
);
    }

}
);


/* pawel maziarz: work around for ie logging */
if (!window.console) {
    
var console = {
        log: 
function(msg) 
     }

    }

}

/* */

jQuery.SelectBox 
= function(selectobj, options) {
    
    
var opt = options || {};
    opt.inputClass 
= opt.inputClass || "selectbox";
    opt.containerClass 
= opt.containerClass || "selectbox-wrapper";
    opt.hoverClass 
= opt.hoverClass || "current";
    opt.currentClass 
= opt.selectedClass || "selected"
    opt.debug 
= opt.debug || false;
    
    
var elm_id = selectobj.id;
    
var active = 0;
    
var inFocus = false;
    
var hasfocus = 0;
    
//jquery object for select element
    var $select = $(selectobj);
    
// jquery container object
    var $container = setupContainer(opt);
    
//jquery input object 
    var $input = setupInput(opt);
    
// hide select and append newly created elements
    $select.hide().before($input).before($container);
    
    
    init();
    
    $input
    .click(
function(){
    
if (!inFocus) {
          $container.toggle();
        }

    }
)
    .focus(
function(){
       
if ($container.not(':visible')) {
           inFocus 
= true;
           $container.show();
       }

    }
)
    .keydown(
function(event) {       
        
switch(event.keyCode) {
            
case 38// up
                event.preventDefault();
                moveSelect(
-1);
                
break;
            
case 40// down
                event.preventDefault();
                moveSelect(
1);
                
break;
            
//case 9:  // tab 
            case 13// return
                event.preventDefault(); // seems not working in mac !
                $('li.'+opt.hoverClass).trigger('click');
                
break;
            
case 27//escape
              hideMe();
              
break;
        }

    }
)
    .blur(
function() {
        
if ($container.is(':visible') && hasfocus > 0 ) {
            
if(opt.debug) console.log('container visible and has focus')
        }
 else {
          
// Workaround for ie scroll - thanks to Bernd Matzner
          if($.browser.msie || $.browser.safari)// check for safari too - workaround for webkit
        if(document.activeElement.getAttribute('id').indexOf('_container')==-1){
          hideMe();
        }
 else {
          $input.focus();
        }

      }
 else {
        hideMe();
      }

        }

    }
);


    
function hideMe() 
        hasfocus 
= 0;
        $container.hide(); 
    }

    
    
function init() {
        $container.append(getSelectOptions($input.attr('id'))).hide();
        
var width = $input.css('width');

    }

    
    
function setupContainer(options) {
        
var container = document.createElement("div");
        $container 
= $(container);
        $container.attr('id', elm_id
+'_container');
        $container.addClass(options.containerClass);
        
        
return $container;
    }

    
    
function setupInput(options) {
        
var input = document.createElement("input");
        
var $input = $(input);
        $input.attr(
"id", elm_id+"_input");
        $input.attr(
"type""text");
        $input.addClass(options.inputClass);
        $input.attr(
"autocomplete""off");
        $input.attr(
"readonly""readonly");
        $input.attr(
"tabIndex", $select.attr("tabindex")); // "I" capital is important for ie
        
        
return $input;    
    }

    
    
function moveSelect(step) {
        
var lis = $("li", $container);
        
if (!lis || lis.length == 0return false;
        active 
+= step;
    
//loop through list
        if (active < 0{
            active 
= lis.size();
        }
 else if (active > lis.size()) {
            active 
= 0;
        }

    scroll(lis, active);
        lis.removeClass(opt.hoverClass);

        $(lis[active]).addClass(opt.hoverClass);
    }

    
    
function scroll(list, active) {
      
var el = $(list[active]).get(0);
      
var list = $container.get(0);
      
      
if (el.offsetTop + el.offsetHeight > list.scrollTop + list.clientHeight) {
        list.scrollTop 
= el.offsetTop + el.offsetHeight - list.clientHeight;      
      }
 else if(el.offsetTop < list.scrollTop) {
        list.scrollTop 
= el.offsetTop;
      }

    }

    
    
function setCurrent() {    
        
var li = $("li."+opt.currentClass, $container).get(0);
        
var ar = (''+li.id).split('_');
        
var el = ar[ar.length-1];
        $select.val(el);
        $input.val($(li).html());
        
return true;
    }

    
    
// select value
    function getCurrentSelected() {
        
return $select.val();
    }

    
    
// input value
    function getCurrentValue() {
        
return $input.val();
    }

    
    
function getSelectOptions(parentid) {
        
var select_options = new Array();
        
var ul = document.createElement('ul');
        $select.children('option').each(
function() {
            
var li = document.createElement('li');
            li.setAttribute('id', parentid 
+ '_' + $(this).val());
            li.innerHTML 
= $(this).html();
            
if ($(this).is(':selected')) {
                $input.val($(
this).html());
                $(li).addClass(opt.currentClass);
            }

            ul.appendChild(li);
            $(li)
            .mouseover(
function(event) {
                hasfocus 
= 1;
                
if (opt.debug) console.log('over on : '+this.id);
                jQuery(event.target, $container).addClass(opt.hoverClass);
            }
)
            .mouseout(
function(event) {
                hasfocus 
= -1;
                
if (opt.debug) console.log('out on : '+this.id);
                jQuery(event.target, $container).removeClass(opt.hoverClass);
            }
)
            .click(
function(event) {
              
var fl = $('li.'+opt.hoverClass, $container).get(0);
                
if (opt.debug) console.log('click on :'+this.id);
                $('#' 
+ elm_id + '_container' + ' li.'+opt.currentClass).removeClass(opt.currentClass); 
                $(
this).addClass(opt.currentClass);
                setCurrent();
                
//$select.change();
                $select.get(0).blur();
                hideMe();
            }
);
        }
);
        
return ul;
    }

    
    
    
}
;

demo
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML xmlns="http://www.w3.org/1999/xhtml">
    
<HEAD>
        
<META http-equiv=Content-Type content="text/html; charset=utf-8"/>
        
<link href="/js/select/mySelect.css" rel="stylesheet" type="text/css"/>
        
<SCRIPT src="/js/jquery/jquery.js" type=text/javascript></SCRIPT>
        
<SCRIPT src="/js/select/mySelect.js" type=text/javascript></SCRIPT>
    
</HEAD>
    
<BODY>
        
<select id="c" style="display: none;width:200px;" name="c"> 
            
<option value="1">生活信息</option>
            
<option value="2">店铺商家</option>
            
<option  value="3" selected>新闻资讯</option>
            
<option value="4">团购活动</option>
            
<option  value="5">招聘信息</option>
        
</select>
        
<select id="d" style="display: none;width:200px;" name="c"> 
            
<option value="1">生活信息</option>
            
<option value="2">店铺商家</option>
            
<option  value="3" selected>新闻资讯</option>
            
<option value="4">团购活动</option>
            
<option  value="5">招聘信息</option>
        
</select> 
    
        
<SCRIPT src="js/jQselect.js" type=text/javascript></SCRIPT>
        
<SCRIPT type=text/javascript>
            $(document).ready(
function() {
                $(
"#c").selectbox();
                $(
"#d").selectbox();
            }
);
        
</SCRIPT>
    
</BODY>
</HTML>
posted on 2010-08-13 14:07 HUIKK 阅读(1700) 评论(0)  编辑  收藏 所属分类: Html

只有注册用户登录后才能发表评论。


网站导航: