diff --git includes/form.inc includes/form.inc index 9018931..bbb5a9b 100644 --- includes/form.inc +++ includes/form.inc @@ -1952,7 +1952,7 @@ function _form_builder_handle_input_element($form_id, &$element, &$form_state) { // Avoid image buttons (which come with garbage value), so we only get value // for the button actually clicked. if (!isset($element['#value']) && empty($element['#has_garbage_value'])) { - $element['#value'] = isset($element['#default_value']) ? $element['#default_value'] : ''; + $element['#value'] = array_key_exists('#default_value', $element) ? $element['#default_value'] : ''; } } } diff --git modules/field/modules/options/options.module modules/field/modules/options/options.module index abff986..e83b468 100644 --- modules/field/modules/options/options.module +++ modules/field/modules/options/options.module @@ -103,10 +103,21 @@ function options_field_widget_form(&$form, &$form_state, $field, $instance, $lan reset($options); $default_value = array(key($options)); } + // Radio buttons need a scalar value. + // If there are no default values, NULL needs to be passed so that the + // appropriate validation is triggered. + if (!$multiple) { + if (!empty($default_value)) { + $default_value = reset($default_value); + } + else { + $default_value = NULL; + } + } + $element += array( '#type' => $multiple ? 'checkboxes' : 'radios', - // Radio buttons need a scalar value. - '#default_value' => $multiple ? $default_value : reset($default_value), + '#default_value' => $default_value, '#options' => $options, ); break; diff --git modules/system/system.module modules/system/system.module index d6d822a..70b8e44 100644 --- modules/system/system.module +++ modules/system/system.module @@ -392,6 +392,11 @@ function system_element_info() { ); $types['radios'] = array( '#input' => TRUE, + // If no #default_value is specified and a user agent submits no value for + // #type 'radios', then _form_builder_handle_input_element() would assign an + // empty string as #value, which in turn would trigger an "illegal choice" + // error in _form_validate(). + '#default_value' => NULL, '#process' => array('form_process_radios'), '#theme_wrappers' => array('radios'), '#pre_render' => array('form_pre_render_conditional_form_element'),