After hours of research and trial and error, I must turn to the group
for help with this. I have a series of three linked combo boxes for
state, county, and city from the tutorial here:
http://forum.phpsitesolutions.com/php-frameworks/cakephp/ajax-cakephp-dynamically-populate-html-select-dropdown-box-t29.html.

They work great... mostly. I have added to the code in the add.ctp
file to include an 'empty' element of 'Please select a [whatever]'. So
all three combo boxes start out with the first value being 'Please
select a [whatever]'.

The user selects a state. The $ajax->observeField on the state combo
box fires and loads the county combo box. This loses the initial
'Please select a [whatever] and displays the first entry in the list
of counties for the selected state.

Even if the user opens the county combo box and selects the first
entry, the $ajax->observeField does not fire to load the next combo
box of cities, probably because there is no actual change. Only if the
user selects a DIFFERENT element than the first one does the event
fire.

A possible way around this is to still have the 'Please select a
[whatever]' as the first element in the county combo box, forcing the
user to make another selection and thus firing the next observeField
trigger to load the cities applicable for a selected county.

How do I do that? How do I force another 'Please select a [whatever]
element into the list that is returned from the controller function to
retrieve the counties for the selected state?

Here are some code snippets:

/app/controllers/examples_controller.php

function getCounties() {
        $this->set('options',
                $this->Example->County->find('list',
                        array(
                                'conditions' => array(
                                        'County.state_id' => 
$this->data['Example']['state_id']
                                ),
                                'group' => array('County.name')
                        )
                )
        );
        $this->render('/examples/ajax_dropdown');
}

function add() {
        if (!empty($this->data)) {
                $this->Example->create();
                if ($this->Example->save($this->data)) {
                $this->Session->setFlash(__('The Example has been saved', 
true));
                        $this->redirect(array('action'=>'index'));
                } else {
                        $this->Session->setFlash(__('The Example could not be 
saved.
Please, try again.', true));
                }
        }
        $cities = array();
        $counties = array();
        $states = $this->Example->State->find('list');
        $this->set(compact('cities', 'counties', 'states'));
}

/app/views/examples/add.ctp

<?php
        echo $form->input(
                'state_id',
                array(
                        'options' => $states,
                        'empty' => 'Please select a state'
                ),
                null,
                array(
                        'id' => 'states',
                        'label' => 'State'
                )
        );
        echo $form->input(
                'county_id',
                array(
                        'options' => $counties,
                        'empty' => 'Please select a county'
                ),
                null,
                array(
                        'id' => 'counties',
                        'label' => 'County'
                )
        );
        $options = array('url' => 'getcounties', 'update' =>
'ExampleCountyId');
        echo $ajax->observeField('ExampleStateId', $options);

Thank you in advance for your kind assistance.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To post to this group, send email to cake-php@googlegroups.com
To unsubscribe from this group, send email to 
cake-php+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to