This module adds the ability to specify attributes for individual options on Drupal Form API elements of the types: select, checkboxes, and radios.

This is an API module, with no user interface. You would only need this module if another module you are using requires it or if you are programming a custom form that needs attributes on select <option> children, individual radio buttons within a radios element, or individual checkbox elements within a checkboxes group element.

Usage

To add attributes to a form element's options, add an #options_attributes key to the form element definition. The #options_attributes value should be an array with keys that match the keys in the #options value array. The values in the #options_attributes array should be formatted like the main #attributes array.

Example:

<?php  
$form['states'] = array(
  '#type' => 'select',
  '#title' => t('States'),
  '#options' => array(
    'AL' => t('Alabama'),
    'AK' => t('Alaska'),
    'AZ' => t('Arizona'),
    'AR' => t('Arkansas'),
    // ..
    'WI' => t('Wisconsin'),
    'WY' => t('Wyoming'),
  ),
  '#options_attributes' => array(
    'AL' => array('class' => array('southeast'), 'data-bbq-meat' => 'pork'),
    'AK' => array('class' => array('non-contiguous'), 'data-bbq-meat' => 'salmon'),
    'AZ' => array('class' => array('southwest'), 'data-bbq-meat' => 'rattlesnake'),
    'AR' => array('class' => array('south'), 'data-bbq-meat' => 'beef'),
    // ...
    'WI' => array('class' => array('midwest'), 'data-bbq-meat' => 'cheese'),
    'WY' => array('class' => array('flyover'), 'data-bbq-meat' => 'bison'),
    ),
  '#attributes' => array('class' => array('states-bbq-selector')),
);
?>

Label and wrapper attributes

Individual attributes for each option's label and wrapper can be set using the '#options_wrapper_attributes' and '#options_label_attributes' keys in the same vein as the '#options_attributes' key. This is only supported for 'radios' and 'checkboxes' elements.

Core Issue

This module exists because of a lack of the options attribute functionality in Drupal core. There is an issue related to adding this to core here: #342316: Introduce proper Form API #types for 'option' and 'optgroup', and make #options consistent.

Supporting organizations: 
Developer of this module

Project information

Releases