[jQuery] Re: Selects populating other selects from JSON data

2009-09-13 Thread Steffan A. Cline

on 9/12/09 8:02 AM, Alex Weber at alexwebe...@gmail.com wrote:

 
 Hey, two suggestions:
 
 First off, if you're using JSON data to populate it then I assume the
 data will come from an external source and you are only generating it
 in your script for testing purposes.
Actually, I wrote this for a friend that insists the data set is small and
wants to just embed it in the page.

 In that case, perfect.  If not,
 and the data is actually hard-coded, then you shouldn't really be
 doing it like this!
I would agree but I have no choice here.
 
 Finally, what I would do and its really just matter of preference,
 instead of doing this:
 
 $(select[name='model']).empty();
 $.each(model, function (){
 $(select[name='model']).append('option value=' + this + '' +
 this +
 '/option') });
 }
Agreed I missed this.
 I would do the following:
 
 var options = '';
 $.each(model, function (){
 html += 'option value=' + this + '' + this + '/option');
 });
 $(select[name='model']).html(options);
 
 It should increase the performance because you cache all the data in a
 variable and insert it into the select in one step, instead of
 appending it during each iteration.
 Using html() will overwrite the previous contents too, so no need to
 use empty() either.
 

Well this is what I currently have. I think I am doing too many .each()
though. Isn't there a get or find that I can do to eliminate iterating
thru all sets to find the selected manufacturer then add the models?

Here is what I currently have.

$(document).ready(function () {
var items = {Aquatech : [Canon 5D Mark II,Nikon D3,Nikon
D3x,Canon 1D,Canon 1Ds,Canon 1Ds Mark II,Canon 1Ds Mark III,Canon
1D Mark III,Canon 30D,Canon EOS 5D,Canon 20D,Nikon D200,Nikon
D700,Canon 40D,Canon 50D,Nikon D300],
Canon : [Canon HF20,Canon SD800,Canon
A570,Canon G10,Canon G11],
Ikelite : [Olympus FE-360,Canon 20D,Canon
Rebel 350 / XT,Nikon D300,Canon Rebel 400 / XTi,Canon 30D,Canon
5D,Nikon D200,Nikon D40,Nikon D40x,Nikon D60,Olympus
SP-510,Olympus E-500,Canon G9,Nikon P5000,Nikon P5100,Nikon
D80,Nikon D90,Nikon P6000,Nikon D700,Canon 40D,Canon 50D,Canon
G10,Canon 5D Mark II,Canon Rebel 500 / T1i,Canon Rebel 450 / XSi],
Sony : [Sony W300]
};

$.each( items, function(brand){
$(select[name='manufacturer']).append('option value=' +
brand + '' + brand + '/option');
});
$(select[name='model']).attr('disabled','disabled');
$(select[name='manufacturer']).change( function(){
var man = this.value;
if( !this.selectedIndex )
$(select[name='model']).empty().attr('disabled','disabled');
$.each( items, function(brand, model){if(brand==man) {
var options=
'option value=Select a brand/option';
$.each(model,
function (){ options += 'option value=' + this + '' + this +
'/option'});
   
$(select[name='model']).removeAttr('disabled').html(options);
}
});
});
});


Any suggestions to simplify this would be appreciated.


 Cheers,
 
 Alex
 
 On Sep 12, 12:48 am, Steffan A. Cline stef...@hldns.com wrote:
 on 9/11/09 8:02 PM, Steffan Cline at stef...@hldns.com wrote:
 
 
 
 
 
 on 9/11/09 5:15 PM, Steffan Cline at stef...@hldns.com wrote:
 
 Perhaps I am not Googling correctly to find the data I am after.
 
 I want to have a select that upon making a choice will add elements to a
 second select. I've seen code to do this using ajax calls but what if I
 embed the data into the page in a JSON format? I am looking for a good
 example of this. Anyone seen one?
 
 Ok, getting closer:
 
 $(document).ready(function () {
     var items = {    Aquatech     : [Canon 5D Mark II,Nikon D3,Nikon
 D3x,Canon 1D,Canon 1Ds,Canon 1Ds Mark II,Canon 1Ds Mark III,Canon
 1D Mark III,Canon 30D,Canon EOS 5D,Canon 20D,Nikon D200,Nikon
 D700,Canon 40D,Canon 50D,Nikon D300],
                     Canon     : [Canon HF20,Canon SD800,Canon
 A570,Canon G10,Canon G11],
                     Ikelite     : [Olympus FE-360,Canon 20D,Canon
 Rebel 350 / XT,Nikon D300,Canon Rebel 400 / XTi,Canon 30D,Canon
 5D,Nikon D200,Nikon D40,Nikon D40x,Nikon D60,Olympus
 SP-510,Olympus E-500,Canon G9,Nikon P5000,Nikon P5100,Nikon
 D80,Nikon D90,Nikon P6000,Nikon D700,Canon 40D,Canon 50D,Canon
 G10,Canon 5D Mark II,Canon Rebel 500 / T1i,Canon Rebel 450 / XSi],
                     Sony         : [Sony W300]
                 };
 
     $.each( items, function(brand){
             $(select[name='manufacturer']).append('option value=' +
 brand + '' + brand + '/option');
             });
     $(select[name='manufacturer']).change( function(){
         $
 
         });
 });
 
 So, that is 

[jQuery] Re: Selects populating other selects from JSON data

2009-09-12 Thread Alex Weber

Hey, two suggestions:

First off, if you're using JSON data to populate it then I assume the
data will come from an external source and you are only generating it
in your script for testing purposes.  In that case, perfect.  If not,
and the data is actually hard-coded, then you shouldn't really be
doing it like this!

Finally, what I would do and its really just matter of preference,
instead of doing this:

$(select[name='model']).empty();
$.each(model, function (){
$(select[name='model']).append('option value=' + this + '' +
this +
'/option') });
}

I would do the following:

var options = '';
$.each(model, function (){
html += 'option value=' + this + '' + this + '/option');
});
$(select[name='model']).html(options);

It should increase the performance because you cache all the data in a
variable and insert it into the select in one step, instead of
appending it during each iteration.
Using html() will overwrite the previous contents too, so no need to
use empty() either.

Cheers,

Alex

On Sep 12, 12:48 am, Steffan A. Cline stef...@hldns.com wrote:
 on 9/11/09 8:02 PM, Steffan Cline at stef...@hldns.com wrote:





  on 9/11/09 5:15 PM, Steffan Cline at stef...@hldns.com wrote:

  Perhaps I am not Googling correctly to find the data I am after.

  I want to have a select that upon making a choice will add elements to a
  second select. I've seen code to do this using ajax calls but what if I
  embed the data into the page in a JSON format? I am looking for a good
  example of this. Anyone seen one?

  Ok, getting closer:

  $(document).ready(function () {
      var items = {    Aquatech     : [Canon 5D Mark II,Nikon D3,Nikon
  D3x,Canon 1D,Canon 1Ds,Canon 1Ds Mark II,Canon 1Ds Mark III,Canon
  1D Mark III,Canon 30D,Canon EOS 5D,Canon 20D,Nikon D200,Nikon
  D700,Canon 40D,Canon 50D,Nikon D300],
                      Canon     : [Canon HF20,Canon SD800,Canon
  A570,Canon G10,Canon G11],
                      Ikelite     : [Olympus FE-360,Canon 20D,Canon
  Rebel 350 / XT,Nikon D300,Canon Rebel 400 / XTi,Canon 30D,Canon
  5D,Nikon D200,Nikon D40,Nikon D40x,Nikon D60,Olympus
  SP-510,Olympus E-500,Canon G9,Nikon P5000,Nikon P5100,Nikon
  D80,Nikon D90,Nikon P6000,Nikon D700,Canon 40D,Canon 50D,Canon
  G10,Canon 5D Mark II,Canon Rebel 500 / T1i,Canon Rebel 450 / XSi],
                      Sony         : [Sony W300]
                  };

      $.each( items, function(brand){
              $(select[name='manufacturer']).append('option value=' +
  brand + '' + brand + '/option');
              });
      $(select[name='manufacturer']).change( function(){
          $

          });
  });

  So, that is populating the first. Great. Now, it's a matter of finding the
  chosen value and then adding the elements of the array to the select.

  A nudge anyone?

 This is ugly but works. Any suggestions on how to shorten it?

 $(document).ready(function () {
     var items = {    Aquatech     : [Canon 5D Mark II,Nikon D3,Nikon
 D3x,Canon 1D,Canon 1Ds,Canon 1Ds Mark II,Canon 1Ds Mark III,Canon
 1D Mark III,Canon 30D,Canon EOS 5D,Canon 20D,Nikon D200,Nikon
 D700,Canon 40D,Canon 50D,Nikon D300],
                     Canon     : [Canon HF20,Canon SD800,Canon
 A570,Canon G10,Canon G11],
                     Ikelite     : [Olympus FE-360,Canon 20D,Canon
 Rebel 350 / XT,Nikon D300,Canon Rebel 400 / XTi,Canon 30D,Canon
 5D,Nikon D200,Nikon D40,Nikon D40x,Nikon D60,Olympus
 SP-510,Olympus E-500,Canon G9,Nikon P5000,Nikon P5100,Nikon
 D80,Nikon D90,Nikon P6000,Nikon D700,Canon 40D,Canon 50D,Canon
 G10,Canon 5D Mark II,Canon Rebel 500 / T1i,Canon Rebel 450 / XSi],
                     Sony         : [Sony W300]
                 };

     $.each( items, function(brand){
             $(select[name='manufacturer']).append('option value=' +
 brand + '' + brand + '/option');
             });
     $(select[name='manufacturer']).change( function(x){
             var man = this.value;
             $.each( items, function(brand, model){
                         if(brand==man) {
                             $(select[name='model']).empty();
                             $.each(model, function (){
 $(select[name='model']).append('option value=' + this + '' + this +
 '/option') });
                             }
                     });

                 });

 });

 Thanks

 Steffan


[jQuery] Re: Selects populating other selects from JSON data

2009-09-11 Thread Steffan A. Cline

on 9/11/09 5:15 PM, Steffan Cline at stef...@hldns.com wrote:

 
 Perhaps I am not Googling correctly to find the data I am after.
 
 I want to have a select that upon making a choice will add elements to a
 second select. I've seen code to do this using ajax calls but what if I
 embed the data into the page in a JSON format? I am looking for a good
 example of this. Anyone seen one?
 
 
Ok, getting closer:

$(document).ready(function () {
var items = {Aquatech : [Canon 5D Mark II,Nikon D3,Nikon
D3x,Canon 1D,Canon 1Ds,Canon 1Ds Mark II,Canon 1Ds Mark III,Canon
1D Mark III,Canon 30D,Canon EOS 5D,Canon 20D,Nikon D200,Nikon
D700,Canon 40D,Canon 50D,Nikon D300],
Canon : [Canon HF20,Canon SD800,Canon
A570,Canon G10,Canon G11],
Ikelite : [Olympus FE-360,Canon 20D,Canon
Rebel 350 / XT,Nikon D300,Canon Rebel 400 / XTi,Canon 30D,Canon
5D,Nikon D200,Nikon D40,Nikon D40x,Nikon D60,Olympus
SP-510,Olympus E-500,Canon G9,Nikon P5000,Nikon P5100,Nikon
D80,Nikon D90,Nikon P6000,Nikon D700,Canon 40D,Canon 50D,Canon
G10,Canon 5D Mark II,Canon Rebel 500 / T1i,Canon Rebel 450 / XSi],
Sony : [Sony W300]
};

$.each( items, function(brand){
$(select[name='manufacturer']).append('option value=' +
brand + '' + brand + '/option');
});
$(select[name='manufacturer']).change( function(){
$

});
});

So, that is populating the first. Great. Now, it's a matter of finding the
chosen value and then adding the elements of the array to the select.

A nudge anyone?


Thanks

Steffan






[jQuery] Re: Selects populating other selects from JSON data

2009-09-11 Thread Steffan A. Cline

on 9/11/09 8:02 PM, Steffan Cline at stef...@hldns.com wrote:

 
 on 9/11/09 5:15 PM, Steffan Cline at stef...@hldns.com wrote:
 
 
 Perhaps I am not Googling correctly to find the data I am after.
 
 I want to have a select that upon making a choice will add elements to a
 second select. I've seen code to do this using ajax calls but what if I
 embed the data into the page in a JSON format? I am looking for a good
 example of this. Anyone seen one?
 
 
 Ok, getting closer:
 
 $(document).ready(function () {
 var items = {Aquatech : [Canon 5D Mark II,Nikon D3,Nikon
 D3x,Canon 1D,Canon 1Ds,Canon 1Ds Mark II,Canon 1Ds Mark III,Canon
 1D Mark III,Canon 30D,Canon EOS 5D,Canon 20D,Nikon D200,Nikon
 D700,Canon 40D,Canon 50D,Nikon D300],
 Canon : [Canon HF20,Canon SD800,Canon
 A570,Canon G10,Canon G11],
 Ikelite : [Olympus FE-360,Canon 20D,Canon
 Rebel 350 / XT,Nikon D300,Canon Rebel 400 / XTi,Canon 30D,Canon
 5D,Nikon D200,Nikon D40,Nikon D40x,Nikon D60,Olympus
 SP-510,Olympus E-500,Canon G9,Nikon P5000,Nikon P5100,Nikon
 D80,Nikon D90,Nikon P6000,Nikon D700,Canon 40D,Canon 50D,Canon
 G10,Canon 5D Mark II,Canon Rebel 500 / T1i,Canon Rebel 450 / XSi],
 Sony : [Sony W300]
 };
 
 $.each( items, function(brand){
 $(select[name='manufacturer']).append('option value=' +
 brand + '' + brand + '/option');
 });
 $(select[name='manufacturer']).change( function(){
 $
 
 });
 });
 
 So, that is populating the first. Great. Now, it's a matter of finding the
 chosen value and then adding the elements of the array to the select.
 
 A nudge anyone?
 
This is ugly but works. Any suggestions on how to shorten it?

$(document).ready(function () {
var items = {Aquatech : [Canon 5D Mark II,Nikon D3,Nikon
D3x,Canon 1D,Canon 1Ds,Canon 1Ds Mark II,Canon 1Ds Mark III,Canon
1D Mark III,Canon 30D,Canon EOS 5D,Canon 20D,Nikon D200,Nikon
D700,Canon 40D,Canon 50D,Nikon D300],
Canon : [Canon HF20,Canon SD800,Canon
A570,Canon G10,Canon G11],
Ikelite : [Olympus FE-360,Canon 20D,Canon
Rebel 350 / XT,Nikon D300,Canon Rebel 400 / XTi,Canon 30D,Canon
5D,Nikon D200,Nikon D40,Nikon D40x,Nikon D60,Olympus
SP-510,Olympus E-500,Canon G9,Nikon P5000,Nikon P5100,Nikon
D80,Nikon D90,Nikon P6000,Nikon D700,Canon 40D,Canon 50D,Canon
G10,Canon 5D Mark II,Canon Rebel 500 / T1i,Canon Rebel 450 / XSi],
Sony : [Sony W300]
};

$.each( items, function(brand){
$(select[name='manufacturer']).append('option value=' +
brand + '' + brand + '/option');
});
$(select[name='manufacturer']).change( function(x){
var man = this.value;
$.each( items, function(brand, model){
if(brand==man) {
$(select[name='model']).empty();
$.each(model, function (){
$(select[name='model']).append('option value=' + this + '' + this +
'/option') });
}
});

});
});


Thanks

Steffan