Hi Micheal,

Thank you so much for that. I knew I was getting close to a solution
but I was well and truly stuck. It is now working and I am delighted.

This is the code that worked for me

success: function(xml) {
        towncity = [];
        $(xml).find("[EMAIL PROTECTED]'"+ currprov +"'] > TOWN_CITY_NAME").map
(function(){
                towncity.push( $(this).text() );
                $("#city").autocomplete(towncity);
        });
}

The XML file I am querying      is a file I constructed myself (so I have
full access to it) for a few different reasons. I am not good enough
at mySQL to create a database with the information, I am too cheap to
pay for a ready made database ;), the autocomplete script gives an
option of storing the data in a local.js file but I did not like this
idea as it may not transfer to future projects and I don't really know
much about JSON.

Once again thank you so much, I expected to have to spend hours trying
to get this to work today!

Mat


On Dec 5, 11:55 am, "Michael Geary" <[EMAIL PROTECTED]> wrote:
> Hi Mat,
>
> 1) You're defining towncity like this:
>
>     var towncity = window.towncity = new Array();
>
> That creates both a local variable named towncity and a window property
> (global variable) of the same name. Is that what you want? Do you need to
> use towncity outside this code? If not, I would change it to:
>
>     var towncity = [];
>
> 2) In the .each() inside your ajax callback you have this code:
>
>     towncity = $(this).text();
>
> That *replaces* the towncity variable with the text of the single XML
> element for the current iteration of .each() - so it's no longer an array
> but is now a simple text string. It doesn't sound like that's what you want,
> is it?
>
> To append the item text to the towncity array, you could change it to:
>
>     towncity.push( $(this).text() );
>
> But you probably also want to clear this array before running the loop (is
> that right?), so just before the $(xml).find(...) you should add:
>
>     towncity = [];  // note: no "var" here
>
> which gives you this code:
>
>     success: function(xml) {
>         towncity = [];
>         $(xml).find(...).map(function(){
>             towncity.push( $(this).text() );
>         });
>     }
>
> Given that, you could simplify the code to:
>
>     success: function(xml) {
>         towncity = $(xml).find(...).map(function(){
>             return $(this).text();
>         });
>     }
>
> BTW, do you have control over the XML file that the server generates? If you
> do, you could use JSON instead of XML to make the code simpler. If you're
> stuck with XML, this code should do the trick.
>
> -Mike
>
> > From: Mat
>
> > Hi there,
>
> > I'm sorry this is a pretty newbie question....
>
> > I am using JQuery with an xml file and autocomplete. What I am trying
> > to achieve is to use an xml file as my data source to autocomplete
> > cities in a form once a user selects their province. When a user
> > selects a particular province then only the cities in that province
> > will be listed by the autocomplete script as the user starts to type
> > in the 'city' form field.
>
> > My problem here is that I am trying to use the array 'towncity' as my
> > data source for autocomplete and change the contents of the array when
> > the province select box #province is changed. However, I can not get
> > my $('#province').change(function().... to affect the array 'towncity'
> > that I have declared outside of the function....
>
> >    <script type="text/javascript">
> >    $(document).ready(function() {
> >            var towncity = window.towncity = new Array();
> >            $("#city").autocomplete(towncity);
> >            $.preloadCssImages();
> >            $('div.jshide').show();
> >            $("#tenantForm").validate({
> >              rules: {
> >                    name: {
> >                      required: true,
> >                      minlength: 2
> >                    },
> >                    province:"required",
> >                    ccom:"required",
> >                    occupied: "required",
> >                    rented:"required",
> >                    condo:"required",
> >                    payment:"required"
>
> >              }
> >            });
>
> >            $("#renewdate").datepicker({
> >                    dateFormat: "d M, yy",
> >                    showOn: "both",
> >                    buttonImage: "images/calendar.gif",
> >                    buttonImageOnly: true
> >            });
>
> >            $('#province').change(function() {
> >                    var currprov = $('option:selected',
> > this).text();
>
> >                    $(function() {
> >                            $.ajax({
> >                                    type: "GET",
> >                                    url: "xml/location.xml",
> >                                    dataType: "xml",
> >                                    success: function(xml) {
>
> > $(xml).find("[EMAIL PROTECTED]'"+ currprov +"'] >
> > TOWN_CITY_NAME").each(function(){
>
> > towncity = $(this).text();
> >                                            });
> >                                    }
> >                            });
> >                    });
> >            });
> >    });
> >     </script>
>
> > Anyone have any ideas?
>
> > Thanks,
> > Mat

Reply via email to