Hey,

THX for the response. I already changed my approach to the problem and
set up ID's for the elements and use .append to replace the options of
the elements. This works just finde, i encode my results to JSON and
jQuery rebuilds the list oft options for my selects the way it should.

A question related to jQuery in general, are there any good sites or
tutorials or what I would call a function-overview for such purposes?
This would be great because it took a LOT of time to gather all
required information to my topic before I could solve it.

Regards


On 30 Mai, 18:43, brian <[email protected]> wrote:
> This is solely due to jQuery (in fact, probably the source of most
> questions on its mailing list).
>
> The problem is that you're completely replacing each of the selects,
> rather than just the options. So, the event handlers you set up on the
> selects are no longer once the selects have been replaced. See here:
>
> http://docs.jquery.com/Frequently_Asked_Questions#Why_do_my_events_st...
>
> Also, it doesn't appear that you have several sets of these 5 selects
> on a page because you're setting the event handlers using the element
> IDs (eg. '#BookingCountryId'). So, you might want to consider using an
> element id, rather than a class (eg. '.ajax_shop_id'), for the target
> to be updated.
>
> Or, don't bother and let jQuery find it using the select element itself:
>
> $('.ajax_page #BookingCountryId').change(function(){
>         var self = this;
>         var selected = $(this).val();
>         ajax_loading_image('.ajax_loading_image');
>
>         $.ajax({
>                 type: "POST",
>                 url: '/bookings/getLocations',
>                 data: "ajax=true&id="+selected,
>                 success: function(msg){
>                         $(self).parent('div').html(msg);
>                         ajax_remove_loading_image('.ajax_loading_image');
>                 }
>         });
>
> });
>
> However, I recommend that you simply replace the options rather than
> the entire select element.
>
> On Sat, May 30, 2009 at 9:06 AM, DigitalDude
>
> <[email protected]> wrote:
>
> > Hi,
>
> > I'm trying to deal with jQuery in CakePHP and basically I want to do
> > the following:
>
> > I have 5 select-boxes in which the user should chose some values, and
> > when a value changes the other selects should be updated with the
> > corresponding data.
> > I figured out how to update selects, that's not a big problem and it
> > works fine. But when I chose a value from a select box that has been
> > populated with jQuery, the change(function()) in my jQuery script does
> > not register the changing of the value, even though the div-id's are
> > set correct.
> > The part of my js-script where the second selectbox should be checked
> > for changed calues is not triggered, I tried many combinations of the
> > element-id but it won't start any function in that part.
>
> > Here's what I'm dealing with:
> > ----------------------------------------------------------------
> > Main-View:
> > ----------------------------------------------------------------
> > <?php echo $form->create('Booking',array('class'=>'ajax_page'));?>
> >        <fieldset>
> >                <legend>Ajax Test 1.2</legend>
> >                <div class="ajax_loading_image"></div>
> >                <?php
> >                echo $form->input('country_id',array(
> >                        'label'=>'Country',
> >            'empty' => 'Choose country'
> >                ));
> >        echo $form->input('location_id',array(
> >                        'label'=>'Location',
> >                        'type' => 'select',
> >            'empty' => 'Choose location',
> >            'div'=>'input select ajax_location_id'
> >        ));
> >                echo $form->input('shop_id',array(
> >                        'label'=>'Shop',
> >                        'type' => 'select',
> >            'empty' => 'Choose shop',
> >                        'div'=>'input select ajax_shop_id'
> >                ));
> >        ?>
> > <?php echo $form->end();?>
>
> > ----------------------------------------------------------------
> > The controller- part(s):
> > ----------------------------------------------------------------
> >    function getLocations() {
> >        $country_id = $this->params['form']['id'];
> >        $locations = array();
> >        $this->layout = null;
>
> >        if($country_id > 0) {
> >            $locations = $this->Booking->Shop->Location->find('list',
> > array(
> >                'contain' => array('Country'),
> >                'conditions' => array(
> >                    'Location.country_id' => $country_id
> >            )));
> >        }
> >        $this->set(compact('locations'));
> >    }
>
> >    function getActiveShops() {
> >        $location_id = $this->params['form']['id'];
> >        $shops = array();
> >        $this->layout = null;
>
> >        if($location_id > 0) {
> >            $shops = $this->Booking->Shop->find('list', array(
> >                'contain' => array('Location'),
> >                'conditions' => array(
> >                    'Shop.location_id' => $location_id
> >            )));
> >        }
> >        $this->set(compact('shops'));
> >    }
> > ----------------------------------------------------------------
> > The jQuery-script:
> > ----------------------------------------------------------------
> > $(document).ready(function() {
> > $('.ajax_page #BookingCountryId').change(function(){
> >        alert("Test!");
> >    // selected value
> >        var selected = $(this).val();
>
> >        // set loading image
> >        ajax_loading_image('.ajax_loading_image');
> >        // ajax
> >        $.ajax({
> >                type: "POST",
> >                url: '/bookings/getLocations',
> >                data: "ajax=true&id="+selected,
> >                success: function(msg){
> >                        //console.log(msg);
> >                        $('.ajax_location_id').html(msg);
> >                        // remove loading image
> >                        ajax_remove_loading_image('.ajax_loading_image');
> >                }
> >        });
> > });
> > $('.ajax_page #BookingLocationId').change(function(){
> >        alert("Test!");
> >    // selected value
> >        var selected = $(this).val();
>
> >        // set loading image
> >        ajax_loading_image('.ajax_loading_image');
> >        // ajax
> >        $.ajax({
> >                type: "POST",
> >                url: '/bookings/getActiveShops',
> >                data: "ajax=true&id="+selected,
> >                success: function(msg){
> >                        //console.log(msg);
> >                        $('.ajax_shop_id').html(msg);
> >                        // remove loading image
> >                        ajax_remove_loading_image('.ajax_loading_image');
> >                }
> >        });
> > });
> > });
> > ----------------------------------------------------------------
>
> > The views of the controller action which should replace the "old"
> > select-elements:
> > ----------------------------------------------------------------
> > (*** function getLocations() ***)
> > ----------------------------------------------------------------
> > <?php
> > if(!empty($locations)) {
> >        echo $form->input('Booking.location_id',array(
> >                        'label'=>'Location',
> >                        'type' => 'select',
> >            'options' => $locations,
> >            'empty' => 'Choose location',
> >            'div' => false,
> >            'name' => 'data[Booking][location_id]'
> >        ));
> > }
> > ?>
> > ----------------------------------------------------------------
> > (*** function getLocations() ***)
> > ----------------------------------------------------------------
> > <?php
> > if(!empty($shops)) {
> >        echo $form->input('shop_id',array(
> >                        'label'=>'Shop',
> >                        'type' => 'select',
> >            'options' => $shops,
> >            'empty' => 'Choose shop',
> >            'div' => false,
> >            'name' => 'data[Booking][shop_id]'
> >        ));
> > }
> > ?>
>
> > The first part where I chose a country and populate the second select-
> > box with the corresponding locations works fine and I get all the
> > right results. But when I select a location it does NOT trigger the
> > second function of the jQuery script and that gives me a headache!
>
> > What is the magic mistake in my code or my thinking? Please help me,
> > I'm stuck on this for days now and I can't figure out why this
> > aaproach does not work correct :(
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to