博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

jQuery plugin LazyForm定制您的CheckBox Radio和Select

Posted on 2009-10-23 15:30  a-peng  阅读(2970)  评论(13编辑  收藏  举报

jQuery plugin LazyForm Version 1 (zhangpeng chen)
定制您的CheckBox, Radio, Select。
在下面浏览器下测试通过:Firefox, IE7, IE8, Google浏览器。 (IE6还是算了吧),其它浏览器还没试过。

目前刚添加了4个皮肤,添加新皮肤非常方便,您可以参考已添加的皮肤图片和css代码,相信您会很快搞定。

效果截图:
一、在没有使用LazyForm的情况下,在XP下运行截图如下

二、使用LazyForm(皮肤Blue)效果如下

三、使用LazyForm(皮肤Black)效果如下

四、皮肤Default

五、皮肤Gray


demo.html代码如下:

Code
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    
<title>demo-lazyform</title>
    
<script type="text/javascript" src="js/jquery.min.js"></script>
    
<script type="text/javascript" src="js/lazyform.js"></script>
    
<link type="text/css" rel="stylesheet" href="css/blue/lazyform.css" id="lazyFormSkin" />
    
<style type="text/css">
    body
    
{
        font
: 12px Simsun, Arial, Helvetica, sans-serif;
        line-height
: 20px;
    
}
    
</style>

    
<script type="text/javascript">
        $(
function() {        
            $(
'#form1').submit(function() {
                
var skin = $('#ddlSkin option:selected').val();
                $(
'#lazyFormSkin').attr('href''css/' + skin + '/lazyform.css');
                skin 
= 'Skin: ' + skin;
                
                
var gender = 'Gender: ' + 
                    $(
'input[name=gender]:checked').val();
                
var gender2 = 'Gender2: ' + 
                    $(
'input[name=gender2]:checked').val();
                    
                
var hobby = 'Hobby: ' + 
                    ($(
'#cbxBaskball').is(':checked'? $('#cbxBaskball').val() + ' ' : ''+ 
                    ($(
'#cbxFootball').is(':checked'? $('#cbxFootball').val() + ' ' : ''+ 
                    ($(
'#cbxSwimming').is(':checked'? $('#cbxSwimming').val() + ' ' : '');
                
var hobby2 = "Hobby2: " + 
                    ($(
'#cbxBaskball2').is(':checked'? $('#cbxBaskball2').val() + ' ' : ''+ 
                    ($(
'#cbxFootball2').is(':checked'? $('#cbxFootball2').val() + ' ' : ''+ 
                    ($(
'#cbxSwimming2').is(':checked'? $('#cbxSwimming2').val() + ' ' : '');
                
                
var country = 'Country: ' + $('#ddlCountry option:selected').text();     
                
var country2 = 'Country2: ' + $('#ddlCountry2 option:selected').text();     
                
                $(
'#result').html(skin + '<br />' + gender + '<br />' + gender2 + '<br />' + 
                    hobby 
+ '<br />' + hobby2 + '<br />' + country + '<br />' + country2);
                
                
return false;
            });
        });
    
</script>
</head>

<body>
    
<form id="form1" method="post" action="javascript:alert('success!');">        
        
<p>
            
<label for="Skin">Skin:</label>
            
<select id="ddlSkin">
                
<option value="Blue">Blue</option>
                
<option value="Black">Black</option>
                
<option value="Default">Default</option>
                
<option value="Gray" >Gray</option>
            
</select>
        
</p>
    
         
<p>
            
<label for="Gender">Gender:</label>
            
<br />
            
<input type="radio" id="rdoMale" name="gender" value="Male" checked="checked" />
            Male    
            
            
<br />
            
<input type="radio" id="rdoFemale" name="gender" value="Female" />
            Female
        
</p>

        
<p>
            
<label for="Gender">Gender2:</label>
            
<input type="radio" id="rdoMale2" name="gender2" value="Male2" />
            Male2
            
            
<input type="radio" id="rdoFemale2" name="gender2" value="Female2" checked="checked" />
            Female2
        
</p>
 
       
        
<p>
            
<label for="Hobby">Hobby:</label>
              
<br />
            
<input type="checkbox" id="cbxBaskball" value="Baskball" checked="checked" />
            Baskball
            
            
<br />
            
<input type="checkbox" id="cbxFootball" value="Football" checked="checked" />
            Football
            
            
<br />
            
<input type="checkbox" id="cbxSwimming" value="Swimming" />
            Swimming
        
</p>
        
        
<p>
            
<label for="Hobby">Hobby2:</label>
            
<input type="checkbox" id="cbxBaskball12" value="Baskball2" checked="checked" />
            Baskball12
            
            
<input type="checkbox" id="cbxFootball2" value="Football2" />
            Football2a
            
            
<input type="checkbox" id="cbxSwimming2" value="Swimming2" checked="checked" />
            Swimming2
        
</p>
       
        
<p>
            
<label for="Country">Country:</label>
            
<br />
            
<select id="ddlCountry">
                
<option value="China"  selected="selected">China</option>
                
<option value="United States" >United States</option>
                
<option value="Canada" >Canada</option>
                
<option value="Holland">Holland</option>
           
</select>
        
</p>
        
        
<p>
            
<label for="Country">Country2:</label>
            
<select id="ddlCountry2" style="width: 350px;">
                
<option value="China2">China2</option>
                
<option value="United States2" selected="selected">United States2</option>
                
<option value="Canada2" >Canada2</option>
                
<option value="Holland2">Holland2</option>
            
</select>
        
</p>
                
        
<p>
            
<input type="submit" value="submit" />
        
</p>    
        
        
<id="result"></p>
    
</form>
</body>
</html>


从代码你就可以看到,LazyForm没有动您的Html和Css样式一根汗毛。
想让Select变长,设置个长度就可以了。
把LazyForm.js去掉,就是您的原样。没有任何改变。

LazyForm源码:

Code
(function($) {
/* ------------------------------------------------------------------------
    LazyForm 1.0
    Copyright (c) 2009, ZhangPeng Chen, peng1988@gmail.com
------------------------------------------------------------------------- 
*/
$.lazyform 
= $.lazyform || {};
$.extend($.lazyform, {
    _inputs : 
null,
    _selects: 
null,
    
    init: 
function() {
        _inputs 
= $('input[type=checkbox], input[type=radio]');
        _inputs.each($.lazyform._initInput);
        
        _selects 
= $('select');
        _selects.each($.lazyform._initSelect);
        
        $(document).click(
function() {
            $(
'div.select div.open').removeClass().next('ul').hide();                     
        });
    },    
    
    _initInput: 
function() {
        
var $self = $(this);
        
var self = this;
        
var radio = $self.is(':radio');
        
        
var id = radio ? (self.type + '-' + self.name + '-' + self.id) : (self.type + '-' + self.id);
        
var className = self.type + (self.checked ? '-checked' : '');
        
var hover = false;
        
        
var $span = $('<span />')
            .attr({
                
'id': id,
                
'class': className
            })
            .bind(
'mouseover mouseout'function() {
                hover 
= !hover;
                $span.attr(
'class', self.type + (self.checked ? '-checked' : ''+ (hover ? '-hover' : ''));
            })
            .bind(
'click'function() {
                
if(radio) {
                    $(
'input[name=' + self.name + ']').each(function() {
                        $(
'#' + self.type + '-' + self.name + '-' + this.id).attr('class', self.type);
                    })
                }

                self.click();                    
                $span.attr(
'class', self.type + (self.checked ? '-checked' : ''));
            });
        
        $self.addClass(
'hidden').before($span);
    },
    
    _$openSelect: 
null,
    _initSelect: 
function() {
        
var $self = $(this);
        
var self = this;
        
        
var selectWidth = $self.width();
        
var selectUlWidth = $self.width() - 2;
        
        
var $select = $('<div />').attr('id''select-' + self.id).width(selectWidth).addClass('select');
        
var $selectItem = $('<div />').append('<span />');
        
var $selectItemText = $selectItem.children('span');
        
var $selectUl = $('<ul />').width(selectUlWidth).hide();
        
var $selectLi = null;
        
var $hoverLi = null;
        
        $self.children().each(
function() {
            
var $tempLi = $('<li />').append(this.text);
            
if(this.selected) {
                $tempLi.addClass(
'hover');
                $selectItemText.text(
this.text);
                
                $selectLi 
= $tempLi;
                $hoverLi 
= $tempLi;
            }
            $selectUl.append($tempLi);
            
            $tempLi
                .bind(
'mouseover'function() {
                    $hoverLi.removeClass();
                    $tempLi.addClass(
'hover');
                    $hoverLi 
= $tempLi;
                })
                .bind(
'click'function() {
                    $self.children().each(
function() {
                        
if($hoverLi && this.text == $hoverLi.text()) {
                            $tempLi.addClass(
'hover');
                            
this.selected = true;
                            
                            $selectLi 
= $tempLi;
                            $hoverLi 
= $tempLi;
                        }                        
                    });                    
                    
                    $selectItem.removeClass();
                    $selectItemText.text($selectLi.text());
                    $selectUl.hide();
                });
        });

        $selectItem.click(
function(e) {
            
if($.lazyform._$openSelect && $.lazyform._$openSelect != $select) {
                $(
'#' + $.lazyform._$openSelect.attr('id'+ ' > div.open').removeClass().next('ul').hide();
            }                                                  
            $.lazyform._$openSelect 
= $select;
            
            $selectItem.toggleClass(
'open');
            
if($selectItem.attr('class'== 'open') {
                
if($hoverLi != $selectLi) {
                    $hoverLi.removeClass();
                    $selectLi.attr(
'class''hover');
                    $hoverLi 
= $selectLi;
                }
                $selectUl.show();    
            } 
else {
                $selectUl.hide();    
            }

            e.stopPropagation();                                
        });

        $select.append($selectItem);
        $select.append($selectUl);
        
        $self.hide().before($select);                
    }
});

$(document).ready(
function() {
    $.lazyform.init();
});
})(jQuery);


注意看这里,运行Demo体验一下: 演示
LazyForm下载地址: LazyForm下载