/** * jQuery InputBox - A Custom Select/Checkbox/Radio Plugin * ------------------------------------------------------------------ * * jQuery InputBox is a plugin for custom Select/Checkbox/Radio Plugin. * * @version 1.1.0 * @since 2013.09.27 * @author charles.yu * * ------------------------------------------------------------------ * * eg: * 1、Select * //class: selected 表示默认选中,如有多个selected默认选中第一个 *
*
* 苏州 * 无锡 * 常州 *
*
* $('div[name="city"]').inputbox(); * * 2、Checkbox * //class: all 表示是全选|全不选按钮,如果是全选按钮,则其"name"为控制对象的"name+All"; checked 表示默认选中 *
*
*
*
* $('.cbt').inputbox(); * * 3、Radio * //class: checked 表示默认选中,如有多个selected默认选中最后一个 *
中文 *
英文 * $('div[name="rbt"]').inputbox(); */ ;(function($){ var opts = {}; var selectbox = { //初始化自定义selectbox init: function(o) { var $o = $(o), _name = $o.attr('name'), _selectValue = $o.find('.opts > a.selected').attr('val')? $o.find('.opts > a.selected').attr('val'):$o.find('.opts > a:first').attr('val'), _selectHtml = $o.find('.opts > a.selected').html()? $o.find('.opts > a.selected').html():$o.find('.opts > a:first').html(); $o.addClass('sb'); $o.append($('
')).append($('')); $('
' + _selectHtml + '
').insertBefore($o.children(':first')); $o.children('.opts').show(); var optsWidth = $o.children('.opts').width(); if(optsWidth == 0){ var optsChildWidth = []; var tempWidth = 0; $o.children('.opts').children('a').each(function(){ optsChildWidth.push($(this).width()); }); for(var i=0; i tempWidth) tempWidth = optsChildWidth[i] } optsWidth = tempWidth + 10; } $o.children('.opts').hide(); $o.children('.opts').css('width', (optsWidth + 15)); var _width = (opts.width != 'auto')? opts.width : $o.children('.opts').width(); //var _width = (opts.width != 'auto')? opts.width : ($o.width() > 0 ? $o.width() : $o.children('.opts').width()); $o.css({'width': _width, 'height': opts.height}).find('div.selected').css({'height': opts.height, 'line-height': opts.height +'px'}); $o.find('.sb_icon').css({'top': ($o.height() - $o.find('.sb_icon').height())/2}); $o.off('click').on('click', selectbox.toggle); $o.off('click', '.opts > a').on('click', '.opts > a', selectbox.select); $o.find('.opts').off('mouseenter mouseleave').on('mouseenter', selectbox.mouseenter).on('mouseleave', selectbox.mouseleave); $(document).off('click', selectbox.hide).on('click', selectbox.hide); }, toggle: function(e) { e.stopPropagation(); var $o = $(this); var $opts = $o.children('.opts'); $o.find('a.selected').removeClass('none'); selectbox.hide(null, $('.sb').not($o)); $o.toggleClass('sb_active'); $opts.css({ 'width': Math.max($opts.width(), $o.width()), 'top': $o.height(), 'left': - parseInt($o.css('border-left-width')) }).toggle($o.hasClass('sb_active')); }, hide: function(e, objs) { var $o = objs ? objs : $('.sb'); $o.removeClass('sb_active').children('.opts').hide().find('a.selected').removeClass('none'); }, select: function(e) { e.stopPropagation(); var $o = $(this).parents('.sb:first'); $o.trigger('click'); $o.find('a.selected').removeClass('selected'); $(this).addClass('selected'); $o.find('div.selected').html($(this).html()); $o.find('input').val($(this).attr('val')); }, mouseenter: function(e){ e.stopPropagation(); var $o = $(this); $o.find('a.selected').addClass('none'); }, mouseleave: function(e){ e.stopPropagation(); var $o = $(this); $o.find('a.selected').removeClass('none'); } }; var checkbox = { //初始化checkbox init: function(o) { var $o = $(o), _name = $o.attr('name'), _value = $o.attr('val')? $o.attr('val'): '', _isChecked = $o.hasClass('checked')? true : false; $o.addClass('cb'); $o.append($('')); $o.click(checkbox.toggle); if($o.hasClass('all')) $o.click(checkbox.allOrNone); if(_isChecked){ $o.removeClass('checked'); $o.click(); } }, toggle: function(e) { $(this).toggleClass('cb_active').children().attr('checked', ($(this).hasClass('cb_active') ? true : false)); }, allOrNone: function(e) { var cbAllName = $(this).attr('name'); if(cbAllName.length > 3){ var cbOneName = cbAllName.substring(0, cbAllName.length - 3); var isChecked = $(this).hasClass('cb_active')? true : false; if(isChecked){ $('.cb[name='+ cbOneName +']').not($('.cb_active[name='+ cbOneName +']')).click(); }else{ $('.cb_active[name='+ cbOneName +']').click(); } } } }; var radiobox = { //初始化radiobox init: function(o) { var $o = $(o), _name = $o.attr('name'), _value = $o.attr('val')? $o.attr('val'): ''; _isChecked = $o.hasClass('checked')? true : false; $o.addClass('rb'); $o.append($('')); $o.click(radiobox.toggle); if(_isChecked){ $o.removeClass('checked'); $o.click(); } }, toggle: function() { var $o = $(this), _name = $o.attr('name'); $('[name="'+ _name +'"]').removeClass('rb_active').children().attr('checked', false); $o.addClass('rb_active').children().attr('checked', true); } }, _init = function(o){ var type = $(o).attr('type'); if(type == 'selectbox'){ selectbox.init(o); }else if(type == 'checkbox'){ checkbox.init(o); }else if(type == 'radiobox'){ radiobox.init(o); } }; $.fn.inputbox = function(options){ opts = $.extend({}, $.fn.inputbox.defaults, options); return this.each(function(){ _init(this); }); }; $.fn.inputbox.defaults = { //type: 'selectbox',//selectbox|checkbox|radiobox width : 'auto', height : 24 }; })(jQuery);