16

I have select list with options:

$options = array(0 => '0', 500 => '500', 1000 => '1000'); 

I'm trying to set it's default value to 500:

$form['price']['min']['#options'] = $options; 
$form['price']['min']['#default_value'] = 500;

But this don't work.

closed as too broad by kiamlaluno Jun 19 '17 at 8:35

Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.

  • 1
    I ran into the same issue. The problem was that I was not rendering the form using drupal_get_form(), but some other way because of the use case. – user1750 Jul 10 '12 at 19:48
  • I met the same question!!!!who can help me? – bluesky_still Nov 6 '12 at 4:30
  • 1
    500 should be a '500', string not an integer. – saadlulu Sep 16 '13 at 10:13

12 Answers 12

3

Your code should be work, generally use key value as default value, if it not working make the string as keys and use it as default value.

2

I've never seen this problem. That default value should work. I would say try making the key a string and set #default_value as a string. The #options array may be being passed through array_merge somewhere, thus rekeying integer keys. If keys are strings then that shouldn't happen. Currently, your array looks like this:

$options = array(
  0 => '0',
  500 => '500',
  1000 => '1000',
);

But passing that array through array_merge can reorganize those integer keys to be in sequential order:

$options = array(
  0 => '0',
  1 => '500',
  2 => '1000',
);

If that happens then the 500 key simply doesn't exist. This is because array_merge does not like to preserve integer keys, but you can use strings to prevent it. So, I think your array should look more like this:

$options = array(
  '0' => '0',
  '500' => '500',
  '1000' => '1000',
);

Then you can set your #default_value:

$form['price']['min']['#default_value'] = '500';

Otherwise, is there anywhere else where the default_value may be being overridden?

2

Did you try using a string instead of an integer?

$form['price']['min']['#default_value'] = "500"

Maybe also worth a try adding the 'und' key.

1

Did you try using the key out of the array $options to define the default value?
$form['price']['min']['#default_value'] = $options[500];

  • If that is done it will technically just pass the value of $options[500], which is (string) '500'. – jordojuice Sep 2 '11 at 21:42
1
$options = array(0 => '0', 500 => '500', 1000 => '1000'); 
$form['price'] = array(
          '#type' => 'select',
          '#options' => $options,
          '#default_value' => 500,
        );

In order to set default value in select list we use #default_value parameter. The value of the default_value attribute of the select list would be the key of the select list array.

0

Following code will show the field with its default value as 500.

$options = array(0 => '0', 500 => '500', 1000 => '1000'); 
$form['price'] = array(
          '#type' => 'select',
          '#options' => $options,
          '#default_value' => 500,
          '#title' => 'Price',
        );  
-1

I faced the same problem and I tried giving the index of the array which I want to be the default value and it worked. My answer is similar to Ashok KS but his second line I could not understand.

-1

fixed,we should set default value first of that $option array, if we added last,the array key changed [1]=>science,[2]=>drama,the right should be [192]=>science,[231]=>drama:-)

-1

try:

$form['price']['#default_value'] = 500;

It's work good for me.

-2

The #default_value should have it's arguments in the form as the #value.

$form['price']['min']['#default_value'] = $options['500'];
-4

Just use

$form['price']['min']['#default_value'] = 2 

which means the default value will take the 2eme option

-5

SOLUTION: Figure out that form_select_options doesn't handle #default_value at all. So I used #value property:

$form['price']['min']['#value'] = isset($_REQUEST['price']['min']) ? $_REQUEST['price']['min'] : $my_default_value;
  • 2
    Select options do have a default value. Also setting the #value param will make it impossible for the user to change the value. – googletorp Aug 8 '11 at 20:57
  • 1
    Look at the code, I set #value to default_value only if there is no any value in #value. – breethe Aug 10 '11 at 8:08
  • You always set a value to #value, either $_REQUEST['price']['min'] or $my_default_value. Whatever you put in the #value will be the value of the field regardless of what ever the user inputs. – googletorp Aug 10 '11 at 10:33
  • If user inputs some value, this value is send through GET ($_REQUEST['price']['min']). So if user inputs value I set #value to user input, otherwise #value = $my_default_value – breethe Aug 10 '11 at 12:01
  • That is the problem. Users can use the select, but it wont matter what they select, the result will be the same. – googletorp Aug 10 '11 at 12:25

Not the answer you're looking for? Browse other questions tagged or ask your own question.