First the bad news:
After taking a look at cascade and playing around with the source code
I think this is not possible with the original cascade plugin.

The cascade plugin is copying the ajax options (including the url) at
initialization time to local variable. So ajax: {url:
$("select#chained").val() +'_1.js'} will be called once at start up
and any later changes of the select input will have no effect on the
ajax settings.

Now the good news:
The cascade plugin can be patched so, that a dynamic URL is working.
It's just a quick&dirty hack, but it should do the job.

Open jquery.cascade.ext.js and insert:
        if (opt.urlCallback) ajax.url = opt.urlCallback(this);
after line 22 ( return { getList: function(parent) { )

than rewrite your code:

function which (element){
        if (element.id == 'bchained_child')
        {
                var selectVal = $("#bchained").val()+'_1.js';
                alert(selectVal);
                return selectVal;
        }
        else
        {
                var selectVal = $("#bchained_child").val()+'_2.js';
                alert(selectVal);
                return selectVal;
        }
}

$("#bchained_child").cascade("#bchained",{
        ajax: {url: "" },
        urlCallback: which
        template: commonTemplate,
        match: commonMatch
});
$("#bchained_sub_child").cascade("#bchained_child",{
        ajax: {url: "" },
        urlCallback: which
        template: commonTemplate,
        match: commonMatch
});


However, you should still try to trigger the original author of the
plugin to implement support for dynamic URLs.


by(e)
Stephan

2009/2/2 James <james.tilb...@gmail.com>:
>
> @boermans
>
> ajax: {url: $("select#chained").val() +'_1.js'},
>
> SHOULD work, but the element being returned is not the updated form
> element.  It is the original element value from when the page
> initially loads.
>
> If anyone knows how to obtain the updated element value I would be
> most appreciative...  :)
>
>
> Thanks!
>
> James
>
> Okay, so now I've realized that the notation has nothing to do with
> the problem.
>
> On Feb 2, 12:47 pm, James <james.tilb...@gmail.com> wrote:
>> Okay, I am tearing what hair I have left out.
>>
>> The following code should illustrate what exactly I'm trying to
>> accomplish, but with my feeble understanding of jQuery I can't seem to
>> be getting what I want:
>>
>> <script type="text/javascript">
>>                 function which (choice){
>>                         var selectVal = 
>> document.getElementById('bchained').value;
>>                         if (choice == 'countryList')
>>                         {
>>                                 selectVal += '_1.js';
>>                                 alert(selectVal);
>>                                 return selectVal;
>>                         }
>>                         else
>>                         {
>>                                 selectVal += '_2.js';
>>                                 alert(selectVal);
>>                                 return selectVal;
>>                         }
>>                 }
>>                 jQuery(document).ready(function()
>>                 {
>>                         jQuery("#bchained_child").cascade("#bchained",{
>>
>>                                 ajax: {url: yo=which('cityList') },
>>                                 template: commonTemplate,
>>                                 match: commonMatch
>>                         });
>>                         
>> jQuery("#bchained_sub_child").cascade("#bchained_child",{
>>                                 ajax: {url: mo=which('cityList') },
>>                                 template: commonTemplate,
>>                                 match: commonMatch
>>                         });
>>                 });
>>         </script>
>>
>> This seems to make perfectly logical sense, except that when my
>> function which() is called, the line
>>
>> document.getElementById('bchained').value;
>>
>> is ONLY returning the value of that element AS IT WAS WHEN THE PAGE
>> WAS FIRST LOADED.
>>
>> For some reason that I don't understand the value is not updated when
>> a different selection is made in the box (according to firebug).
>>
>> Please help me someone if you can!!!!   :)
>>
>> I'm trying to hang in there.... ;)
>>
>> On Feb 2, 10:26 am, James <james.tilb...@gmail.com> wrote:
>>
>> > @boermans
>>
>> > The first thing I tried was your example:
>>
>> > ajax: {url: $("select#chained").val() +'_1.js'},
>>
>> > I don't think this works inside this structure, but then I'm not
>> > reallty sure how to test the variable INSIDE THIS STRUCTURE!  :)
>>
>> > Here is my whole code now...
>>
>> > <script type="text/javascript">
>>
>> >                 var selectVal = $("select#bchained").val();
>> >                 var countryList = selectVal + '_1.js';
>> >                 var cityList = selectVal + '_2.js';
>> >                 alert (countryList); //just to test the varaible
>> >                 alert (cityList); //just to test the variable
>> >                 jQuery(document).ready(function()
>> >                 {
>> >                         jQuery("#bchained_child").cascade("#bchained",{
>> >                                 ajax: {url: countryList},
>> >                                 template: commonTemplate,
>> >                                 match: commonMatch
>> >                         });
>> >                         alert(selectVal, jsonUrl);
>> >                         
>> > jQuery("#bchained_sub_child").cascade("#bchained_child",{
>> >                                 ajax: {url: cityList },
>> >                                 template: commonTemplate,
>> >                                 match: commonMatch
>> >                         });
>> >                 });
>> >         </script>
>>
>> > The two alerts pop up when the page is first loaded or reloaded and
>> > the variables are correct.  However, I don't think they get changed
>> > when the value in the select box gets changed.  In other words, that
>> > first variable declaration var selectVal = $("select#bchained").val();
>> > only happens when the page is LOADED/RELOADED, and not dynamically
>> > through the DOM.
>>
>> > I need to figure out how to get either a) those variables updated when
>> > a select box value changes, or b) some way to append my simple file
>> > extensions to the value inside the ajax: {url: ???} call.....
>>
>> > Is there a way to add a function inside the ajax: {url: } structure?
>>
>> > On Feb 2, 5:33 am, boermans <boerm...@gmail.com> wrote:
>>
>> > > On Feb 2, 5:20 pm, James <james.tilb...@gmail.com> wrote:
>>
>> > > > But let's say I want to append an extension to "pizza".  For example I
>> > > > want "pizza.json", or "pizza_1.js".
>>
>> > > > How do I get this extra string text into the ajax option above?
>>
>> > > > I have tried + notation, various combinations of brackets, etc.  But I
>> > > > just can't get it to work and can't find appropriate documentation
>> > > > anywhere on this.
>>
>> > > It could be useful to see your code - even if it's not working.
>>
>> > > Did it look anything like this?
>>
>> > > ajax: {url: $("select#chained").val() +'_1.js'},
>>
>> > > If that doesn't work, break it down:
>>
>> > > var selectVal = $("select#chained").val();
>> > > var jsonUrl = selectVal + '.json';
>>
>> > > and use the variable
>>
>> > > jQuery("#chained_sub_child").cascade("#chained_child",{
>> > >                                 ajax: {url:  jsonUrl},
>> > >                                 template: commonTemplate,
>> > >                                 match: commonMatch
>> > >                         });
>>
>> > > If that's not working you can try something like this to help reveal
>> > > where the problem is
>> > > console.log(selectVal, jsonUrl);
>>
>> > > Hope that gets you on the road :)

Reply via email to