Drupal 6: Implementing a color picker field in a Drupal form

I recently added an admin settings page to allow the user to select colors for node title labels. I quick Google search and I discovered this promising jQuery color picker library. Here’s how I embedded it in a form.

First I unpacked the colorpicker.zip file and moved it into my theme folder. Next I added a form callback function in my module.

<?php
// defining my form callback function
function _MYFORM() {

  $form = array();

  // include css & javascript for color picker
  drupal_add_css(path_to_theme() . '/colorpicker/css/colorpicker.css');
  drupal_add_js(path_to_theme() . '/colorpicker/js/colorpicker.js');

  // define field ID
  $formElementID = 'MYFORMELEMENT';

  // create a javascript-friendly ID
  $jsID = 'edit-' . str_replace('_','-',$formElementID);

  // adding textfield input for color picker widget
  $form[$formElementID] = array(
    '#type' => 'textfield',
    '#title' => t('MY FIELD TITLE'),
    '#size' => 6,
    '#maxlength' => 6,
    '#suffix' => "
      <script type='text/javascript'>
        $(document).ready(function(){
          colorPickerAttach('#$jsID');
        });
      </script>"
  );

  // add a javascript function to attach the color picker to a form element
  $js = "
    function colorPickerAttach(which) {
      $(which).ColorPicker({
        onSubmit: function(hsb, hex, rgb) {
          $(which).val(hex);
        },
        onBeforeShow: function () {
          $(this).ColorPickerSetColor(this.value);
        }
      })
      .bind('keyup', function(){
        $(this).ColorPickerSetColor(this.value);
      });
    }
  ";
  drupal_add_js($js, 'inline');

  return $form;

}
?>

Now my form has a text input that uses a fancy color picker to choose the hex value. More documentation on the color picker can he found here.

Here’s a screenshot of the color picker in action:

colorPicker

Updated: