function form_type_checkbox_value

Determines the value for a checkbox form element.

Parameters

$form: The form element whose value is being populated.

$input: The incoming input to populate the form element. If this is FALSE, the element's default value should be returned.

Return value

The data that will appear in $form_state['values'] for this element, or nothing to use the default.

Related topics

File

includes/form.inc, line 2362

Code

function form_type_checkbox_value($element, $input = FALSE) {
    if ($input === FALSE) {
        // Use #default_value as the default value of a checkbox, except change
        // NULL to 0, because _form_builder_handle_input_element() would otherwise
        // replace NULL with empty string, but an empty string is a potentially
        // valid value for a checked checkbox.
        return isset($element['#default_value']) ? $element['#default_value'] : 0;
    }
    else {
        // Checked checkboxes are submitted with a value (possibly '0' or ''):
        // http://www.w3.org/TR/html401/interact/forms.html#successful-controls.
        // For checked checkboxes, browsers submit the string version of
        // #return_value, but we return the original #return_value. For unchecked
        // checkboxes, browsers submit nothing at all, but
        // _form_builder_handle_input_element() detects this, and calls this
        // function with $input=NULL. Returning NULL from a value callback means to
        // use the default value, which is not what is wanted when an unchecked
        // checkbox is submitted, so we use integer 0 as the value indicating an
        // unchecked checkbox. Therefore, modules must not use integer 0 as a
        // #return_value, as doing so results in the checkbox always being treated
        // as unchecked. The string '0' is allowed for #return_value. The most
        // common use-case for setting #return_value to either 0 or '0' is for the
        // first option within a 0-indexed array of checkboxes, and for this,
        // form_process_checkboxes() uses the string rather than the integer.
        return isset($input) ? $element['#return_value'] : 0;
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.