Colour Picker 2.0
Created Tuesday 16th of September 2008 by Andreas Lagerkvist
Copyright © 2008 Andreas Lagerkvist (andreaslagerkvist.com)
Please have a look at the "Other Resources" for bug reports or further help on jQuery. Do not post bug reports or feature requests as comments to unrelated articles. If bug reporting on bugtracker.a-framework.org fails, e-mail me.
What it Does
Use this plug-in on a normal <select>-element filled with colours to turn it in to a colour-picker widget that allows users to view all the colours in the drop-down as well as enter their own, preferred, custom colour. Only about 1k compressed.
How to Use
jQuery('select[name="colour"]').colourPicker({ico: 'my-icon.gif', title: 'Select a colour from the list'}); Would replace the select with 'my-icon.gif' which, when clicked, would open a dialogue with the title 'Select a colour from the list'.
You can close the colour-picker without selecting a colour by clicking anywhere outside the colour-picker box.
Here's a handy PHP-function to generate a list of "web-safe" colours:
function gwsc() {
$cs = array('00', '33', '66', '99', 'CC', 'FF');
for($i=0; $i<6; $i++) {
for($j=0; $j<6; $j++) {
for($k=0; $k<6; $k++) {
$c = $cs[$i] .$cs[$j] .$cs[$k];
echo "<option value=\"$c\">#$c</option>\n";
}
}
}
}
Use it like this: <select name="colour"><?php gwsc(); ?></select>.
Example
Example Code
HTML
<div id="jquery-colour-picker-example">
<p>
<label>
Pick a colour<br />
<select name="colour">
<option value="ffffff">#ffffff</option>
<option value="ffccc9">#ffccc9</option>
<option value="ffce93">#ffce93</option>
<option value="fffc9e">#fffc9e</option>
<option value="ffffc7">#ffffc7</option>
<option value="9aff99">#9aff99</option>
<option value="96fffb">#96fffb</option>
<option value="cdffff">#cdffff</option>
<option value="cbcefb">#cbcefb</option>
<option value="cfcfcf">#cfcfcf</option>
<option value="fd6864">#fd6864</option>
<option value="fe996b">#fe996b</option>
<option value="fffe65">#fffe65</option>
<option value="fcff2f">#fcff2f</option>
<option value="67fd9a">#67fd9a</option>
<option value="38fff8">#38fff8</option>
<option value="68fdff">#68fdff</option>
<option value="9698ed">#9698ed</option>
<option value="c0c0c0">#c0c0c0</option>
<option value="fe0000">#fe0000</option>
<option value="f8a102">#f8a102</option>
<option value="ffcc67">#ffcc67</option>
<option value="f8ff00">#f8ff00</option>
<option value="34ff34">#34ff34</option>
<option value="68cbd0">#68cbd0</option>
<option value="34cdf9">#34cdf9</option>
<option value="6665cd">#6665cd</option>
<option value="9b9b9b">#9b9b9b</option>
<option value="cb0000">#cb0000</option>
<option value="f56b00">#f56b00</option>
<option value="ffcb2f">#ffcb2f</option>
<option value="ffc702">#ffc702</option>
<option value="32cb00">#32cb00</option>
<option value="00d2cb">#00d2cb</option>
<option value="3166ff">#3166ff</option>
<option value="6434fc">#6434fc</option>
<option value="656565">#656565</option>
<option value="9a0000">#9a0000</option>
<option value="ce6301">#ce6301</option>
<option value="cd9934">#cd9934</option>
<option value="999903">#999903</option>
<option value="009901">#009901</option>
<option value="329a9d">#329a9d</option>
<option value="3531ff">#3531ff</option>
<option value="6200c9">#6200c9</option>
<option value="343434">#343434</option>
<option value="680100">#680100</option>
<option value="963400">#963400</option>
<option value="986536" selected="selected">#986536</option>
<option value="646809">#646809</option>
<option value="036400">#036400</option>
<option value="34696d">#34696d</option>
<option value="00009b">#00009b</option>
<option value="303498">#303498</option>
<option value="000000">#000000</option>
<option value="330001">#330001</option>
<option value="643403">#643403</option>
<option value="663234">#663234</option>
<option value="343300">#343300</option>
<option value="013300">#013300</option>
<option value="003532">#003532</option>
<option value="010066">#010066</option>
<option value="340096">#340096</option>
</select>
</label>
</p>
</div>
JS
jQuery('#jquery-colour-picker-example select').colourPicker({
ico: WEBROOT + 'aFramework/Modules/Base/gfx/jquery.colourPicker.gif',
title: false
});
Source Code
jQuery.fn.colourPicker = function (conf) {
// Config for plug
var config = jQuery.extend({
id: 'jquery-colour-picker', // id of colour-picker container
ico: 'ico.gif', // SRC to colour-picker icon
title: 'Pick a colour', // Default dialogue title
inputBG: true, // Whether to change the input's background to the selected colour's
speed: 500, // Speed of dialogue-animation
openTxt: 'Open colour picker'
}, conf);
// Inverts a hex-colour
var hexInvert = function (hex) {
var r = hex.substr(0, 2);
var g = hex.substr(2, 2);
var b = hex.substr(4, 2);
return 0.212671 * r + 0.715160 * g + 0.072169 * b < 0.5 ? 'ffffff' : '000000'
};
// Add the colour-picker dialogue if not added
var colourPicker = jQuery('#' + config.id);
if (!colourPicker.length) {
colourPicker = jQuery('<div id="' + config.id + '"></div>').appendTo(document.body).hide();
// Remove the colour-picker if you click outside it (on body)
jQuery(document.body).click(function(event) {
if (!(jQuery(event.target).is('#' + config.id) || jQuery(event.target).parents('#' + config.id).length)) {
colourPicker.hide(config.speed);
}
});
}
// For every select passed to the plug-in
return this.each(function () {
// Insert icon and input
var select = jQuery(this);
var icon = jQuery('<a href="#"><img src="' + config.ico + '" alt="' + config.openTxt + '" /></a>').insertAfter(select);
var input = jQuery('<input type="text" name="' + select.attr('name') + '" value="' + select.val() + '" size="6" />').insertAfter(select);
var loc = '';
// Build a list of colours based on the colours in the select
jQuery('option', select).each(function () {
var option = jQuery(this);
var hex = option.val();
var title = option.text();
loc += '<li><a href="#" title="'
+ title
+ '" rel="'
+ hex
+ '" style="background: #'
+ hex
+ '; colour: '
+ hexInvert(hex)
+ ';">'
+ title
+ '</a></li>';
});
// Remove select
select.remove();
// If user wants to, change the input's BG to reflect the newly selected colour
if (config.inputBG) {
input.change(function () {
input.css({background: '#' + input.val(), color: '#' + hexInvert(input.val())});
});
input.change();
}
// When you click the icon
icon.click(function () {
// Show the colour-picker next to the icon and fill it with the colours in the select that used to be there
var iconPos = icon.offset();
var heading = config.title ? '<h2>' + config.title + '</h2>' : '';
colourPicker.html(heading + '<ul>' + loc + '</ul>').css({
position: 'absolute',
left: iconPos.left + 'px',
top: iconPos.top + 'px'
}).show(config.speed);
// When you click a colour in the colour-picker
jQuery('a', colourPicker).click(function () {
// The hex is stored in the link's rel-attribute
var hex = jQuery(this).attr('rel');
input.val(hex);
// If user wants to, change the input's BG to reflect the newly selected colour
if (config.inputBG) {
input.css({background: '#' + hex, color: '#' + hexInvert(hex)});
}
// Trigger change-event on input
input.change();
// Hide the colour-picker and return false
colourPicker.hide(config.speed);
return false;
});
return false;
});
});
};
Download
Plug-in
- jquery.colourPicker.js (7.51 kb Unpacked) (Minified)
- jquery.colourPicker.css (1.06 kb Unpacked)
- jquery.colourPicker.gif

Requires
Random jQuery Plug-ins
Content Scroller
Use this plug-in to make a list of elements only show one at a time and every now and then scroll to the next one. The plug-in scrolls in infinty, sta...
Super Simple Tabs
This is an extremely basic tabs-plugin which allows you to create tabbed content from the ever-so-common list of in-page-links. The plug-in takes one ...
Code Block Toolbar
If you post code-examples on your site you can use this plug-in to add some nifty buttons below each code-example that allows the user to, for example...