Skip to content

Instantly share code, notes, and snippets.

@paularmstrong
Created September 12, 2011 17:05
Show Gist options
  • Save paularmstrong/1211783 to your computer and use it in GitHub Desktop.
Save paularmstrong/1211783 to your computer and use it in GitHub Desktop.
Fancy Select Box replacement that allows you to style everything about your select box
.fancyselect {
display: inline;
position: absolute;
padding: 2px 2px 0 2px;
}
.fancyselect.open {
background: #FFF;
border: 2px solid #DDD;
padding: 0;
}
.fancyselect ul,
.fancyselect h3 {
clear: both;
position: static;
}
.fancyselect h3 {
padding-right: 10px;
cursor: pointer;
background: url(data:image/gif;base64,R0lGODlhBwAEAIABAGZmZv///yH5BAEAAAEALAAAAAAHAAQAAAIIhA+BGWoNWSgAOw==) right center no-repeat;
float: left;
width: auto;
}
(function($) {
var defaults = {
className: 'fancyselect',
openClassName: 'open',
titleEl: 'h3'
};
var settings;
$.fn.fancyselect = function(settings) {
settings = $.extend(defaults, settings);
this.each(function() {
var $this = $(this).hide();
$this.after('<div class="' + settings.className + '"><' + settings.titleEl + '><span></span></' + settings.titleEl + '><ul></ul></div>');
var $dropdown = $this.next('.' + settings.className);
var $list = $dropdown.find('ul');
var $selected = $this.find('option[selected]');
var titleText = '';
if($selected.length) {
titleText = $selected.val();
} else {
titleText = $this.find('option:first-child').text()
}
var $title = $dropdown.find(settings.titleEl + ' span').text(titleText);
$this.find('option').each(function() {
$list.append('<li><a href="#' + $(this).val() + '">' + $(this).text() + '</a></li>');
});
var $listitems = $list.find('li').hide();
function close() {
$(document).unbind('mouseup.fancyselect');
$listitems.slideUp(100, function() {
$dropdown.removeClass(settings.openClassName);
isOpen = false;
});
}
var isOpen = false;
$dropdown.bind('click', function() {
if(!isOpen) {
$dropdown.addClass(settings.openClassName);
$listitems.slideDown(200, function() {
isOpen = true;
});
$(document).bind('mouseup.fancyselect', function() {
close();
});
} else {
close();
}
});
$list.find('a').bind('click', function(e) {
e.preventDefault();
e.stopPropagation();
$this.val($(this).attr('href').replace('#', '')).change();
$title.text($(this).text());
close();
});
});
}
})(jQuery);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment