Bob Smith
2011-Jul-20 05:07 UTC
Any way to get all records from a partial into a JavaScript array to test?
I have a partial called people that has a radio button called hoh for head of household. I''m trying to have JavaScript look at each person and find the one that has hoh=1. This record then has it''s name copied to another field used for mailings. The web page has each record from the partial with a different id, household_person_1001, household_person_1030, etc. I can''t see a way to get all the person records into a JavaScript array. Please help. Bob <bsm2th-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Walter Lee Davis
2011-Jul-20 13:44 UTC
Re: Any way to get all records from a partial into a JavaScript array to test?
On Jul 20, 2011, at 1:07 AM, Bob Smith wrote:> I have a partial called people that has a radio button called hoh for > head of household. I''m trying to have JavaScript look at each person > and find the one that has hoh=1. This record then has it''s name copied > to another field used for mailings. The web page has each record from > the partial with a different id, household_person_1001, > household_person_1030, etc. I can''t see a way to get all the person > records into a JavaScript array. Please help. > >Parts of this seem pretty easy, but there''s one thing you didn''t mention -- where are the names stored? Are these radio buttons set up with value="Bob Smith" or are they value="1030" (the ID)? If you apply a classname to these radio buttons, then it''s easy to grab all of them. var hoh_chosen = $$(''input.hoh:checked''); Now you have all of the checked radio buttons with class="hoh" applied to them. You iterate over them and find the nearby associated mailing field: hoh_chosen.each(function(elm){ // here I''m making another guess about your layout, that // you''ve added a div around the common inputs for each person, and // you''ve applied the classname mailing_name to that text field var mailing = elm.up(''div'').down(''input.mailing_name''); if(mailing){ mailing.setValue(elm.getValue()); // and that only works if the value of the radio is what you want } }); So lots of assumptions here, but it''s really quite terse to do with Prototype if the value is there to steal. But if your radio buttons only have the ID, then I wouldn''t set the mailing name here, but in the controller after the form is submitted. There, you can look up the user by the ID chosen in your hoh radio, and it''s all there for you. Walter> Bob <bsm2th-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> > > -- > You received this message because you are subscribed to the Google > Groups "Ruby on Rails: Talk" group. > To post to this group, send email to rubyonrails- > talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org > . > For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en > . >-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Bob Smith
2011-Jul-22 07:25 UTC
Re: Any way to get all records from a partial into a JavaScript array to test?
The purpose of this button is to make it easy to change the way my app stores names. The old way was with a first and last name for the whole family, with the sex and birthdays of all family members later. Now I''m trying to connect the names and birthdays, so any person in the family that has their name listed can come in. The easiest way I''ve come up with to move to the new way is with is a button that will copy the name to whatever person has their radio button selected when the button is pressed. my radio buttons return the id number of a person record to a variable - @households.hoh. Rails is handling this fine. I''ll need to add to the update method to copy the new name for the hoh if the radio button was changed. var hoh_chosen = $$(''input.hoh:checked''); - when I try this, nothing is selected, even with a radio button checked I''ve tried surrounding the radio_button call with a <div class="hoh"> and <div id="hoh"> with no luck. <%= radio_button "household", "hoh", person.id %> To me, it looks like I''m either not setting the class name correctly, or not looking for them right. Please help. Bob On Jul 20, 9:44 am, Walter Lee Davis <wa...-HQgmohHLjDZWk0Htik3J/w@public.gmane.org> wrote:> On Jul 20, 2011, at 1:07 AM, Bob Smith wrote: > > > I have a partial called people that has a radio button called hoh for > > head of household. I''m trying to have JavaScript look at each person > > and find the one that has hoh=1. This record then has it''s name copied > > to another field used for mailings. The web page has each record from > > the partial with a different id, household_person_1001, > > household_person_1030, etc. I can''t see a way to get all the person > > records into a JavaScript array. Please help. > > Parts of this seem pretty easy, but there''s one thing you didn''t > mention -- where are the names stored? Are these radio buttons set up > with value="Bob Smith" or are they value="1030" (the ID)? > > If you apply a classname to these radio buttons, then it''s easy to > grab all of them. > > var hoh_chosen = $$(''input.hoh:checked''); > > Now you have all of the checked radio buttons with class="hoh" applied > to them. You iterate over them and find the nearby associated mailing > field: > > hoh_chosen.each(function(elm){ > // here I''m making another guess about your layout, that > // you''ve added a div around the common inputs for each person, and > // you''ve applied the classname mailing_name to that text field > var mailing = elm.up(''div'').down(''input.mailing_name''); > if(mailing){ > mailing.setValue(elm.getValue()); > // and that only works if the value of the radio is what you want > } > > }); > > So lots of assumptions here, but it''s really quite terse to do with > Prototype if the value is there to steal. But if your radio buttons > only have the ID, then I wouldn''t set the mailing name here, but in > the controller after the form is submitted. There, you can look up the > user by the ID chosen in your hoh radio, and it''s all there for you. > > Walter > > > Bob <bsm...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> > > > -- > > You received this message because you are subscribed to the Google > > Groups "Ruby on Rails: Talk" group. > > To post to this group, send email to rubyonrails- > > talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > > To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org > > . > > For more options, visit this group athttp://groups.google.com/group/rubyonrails-talk?hl=en > > . > >-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Walter Lee Davis
2011-Jul-22 11:05 UTC
Re: Re: Any way to get all records from a partial into a JavaScript array to test?
On Jul 22, 2011, at 3:25 AM, Bob Smith wrote:> The purpose of this button is to make it easy to change the way my app > stores names. The old way was with a first and last name for the whole > family, with the sex and birthdays of all family members later. Now > I''m trying to connect the names and birthdays, so any person in the > family that has their name listed can come in. The easiest way I''ve > come up with to move to the new way is with is a button that will copy > the name to whatever person has their radio button selected when the > button is pressed. > > my radio buttons return the id number of a person record to a variable > - @households.hoh. Rails is handling this fine. > I''ll need to add to the update method to copy the new name for the hoh > if the radio button was changed. > > var hoh_chosen = $$(''input.hoh:checked''); - when I try this, nothing > is selected, even with a radio button checked > I''ve tried surrounding the radio_button call with a <div class="hoh"> > and <div id="hoh"> with no luck. > <%= radio_button "household", "hoh", person.id %> > > To me, it looks like I''m either not setting the class name correctly, > or not looking for them right. Please help.You need to add the class to the radio button itself. The HTML you want to see in your browser looks like this: <input type="radio" class="hoh" id="household_hoh_123" name="household_hoh" value="123" /> To add the class to the radio_button call, just add it in the options hash: :class => ''hoh''. The reason that the JavaScript didn''t give you back anything was because it didn''t match anything. But there''s a larger issue here. Where is the name located in the current page when you have that radio button selected? Is it in the label to the radio button, or elsewhere on the same page in a find-able location? Because the code I gave you earlier would only access the value of the found radio button, in this case 123. If it''s in the label, then depending on whether it''s before or after the radio, you could access it with elm.previous(''label'').innerHTML or elm.next(''label'').innerHTML I can''t help but think that it would be much easier to fix this in the controller, copy the chosen person (as a found object through AR) into the correct relationship and save. Walter> > Bob > > > On Jul 20, 9:44 am, Walter Lee Davis <wa...-HQgmohHLjDZWk0Htik3J/w@public.gmane.org> wrote: >> On Jul 20, 2011, at 1:07 AM, Bob Smith wrote: >> >>> I have a partial called people that has a radio button called hoh >>> for >>> head of household. I''m trying to have JavaScript look at each person >>> and find the one that has hoh=1. This record then has it''s name >>> copied >>> to another field used for mailings. The web page has each record >>> from >>> the partial with a different id, household_person_1001, >>> household_person_1030, etc. I can''t see a way to get all the person >>> records into a JavaScript array. Please help. >> >> Parts of this seem pretty easy, but there''s one thing you didn''t >> mention -- where are the names stored? Are these radio buttons set up >> with value="Bob Smith" or are they value="1030" (the ID)? >> >> If you apply a classname to these radio buttons, then it''s easy to >> grab all of them. >> >> var hoh_chosen = $$(''input.hoh:checked''); >> >> Now you have all of the checked radio buttons with class="hoh" >> applied >> to them. You iterate over them and find the nearby associated mailing >> field: >> >> hoh_chosen.each(function(elm){ >> // here I''m making another guess about your layout, that >> // you''ve added a div around the common inputs for each person, >> and >> // you''ve applied the classname mailing_name to that text field >> var mailing = elm.up(''div'').down(''input.mailing_name''); >> if(mailing){ >> mailing.setValue(elm.getValue()); >> // and that only works if the value of the radio is what you >> want >> } >> >> }); >> >> So lots of assumptions here, but it''s really quite terse to do with >> Prototype if the value is there to steal. But if your radio buttons >> only have the ID, then I wouldn''t set the mailing name here, but in >> the controller after the form is submitted. There, you can look up >> the >> user by the ID chosen in your hoh radio, and it''s all there for you. >> >> Walter >> >>> Bob <bsm...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> >> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Ruby on Rails: Talk" group. >>> To post to this group, send email to rubyonrails- >>> talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org >>> To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org >>> . >>> For more options, visit this group athttp://groups.google.com/group/rubyonrails-talk?hl=en >>> . >> >> > > -- > You received this message because you are subscribed to the Google > Groups "Ruby on Rails: Talk" group. > To post to this group, send email to rubyonrails- > talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org > . > For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en > . >-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Bob Smith
2011-Jul-23 06:33 UTC
Re: Any way to get all records from a partial into a JavaScript array to test?
The problem with putting this in the controller is that there isn''t a chosen person to add the name to until someone asks the person which birthday is theirs from the list and selects the correct radio_button. The class in the radio button worked perfectly, but now the elm.down statements are the new problem.. Here is my Javascript function function move(){ var hoh = $$(''input.hoh:checked''); hoh.each(function(elm){ { elm.up(''div'').down(''input.last_name'').value = $ (''household_last_name'') elm.up(''div'').down(''input.first_name'').value = $ (''household_first_name'') elm.up(''div'').down(''input.middle'').value = $ (''household_middle'') } }) } and the page source for these fields <div id="person"><tr> <td width=100><input checked="checked" class="hoh" id="household_hoh_23" name="household[hoh]" type="radio" value="23" /></td><td><input autocomplete="off" id="household_people_attributes__last_name" maxlength="25" name="household[people_attributes][][last_name]" size="25" style="text- align: left" type="text" value="" /></td> <td><input autocomplete="off" id="household_people_attributes__first_name" maxlength="25" name="household[people_attributes][][first_name]" size="25" style="text-align: left" type="text" value="0" /></td> <td><input autocomplete="off" id="household_people_attributes__middle" maxlength="1" name="household[people_attributes][][middle]" size="1" style="text-align: right" type="text" value="" /></td> <td><input autocomplete="off" id="household_people_attributes__sex" maxlength="1" name="household[people_attributes][][sex]" size="1" style="text-align: right" type="text" value="F" /></td> <td><input autocomplete="off" id="household_people_attributes__month_" maxlength="2" name="household[people_attributes][][month_]" size="2" style="text-align: right" type="text" value="11" /></td> <td><input autocomplete="off" id="household_people_attributes__day_" maxlength="2" name="household[people_attributes][][day_]" size="2" style="text-align: right" type="text" value="8" /></td> <td><input autocomplete="off" id="household_people_attributes__year_" maxlength="4" name="household[people_attributes][][year_]" size="4" style="text-align: right" type="text" value="1983" /></td> <td> <input id="household_people_attributes__id" name="household[people_attributes][][id]" type="hidden" value="23" /> <a href="/people/23" onclick="if (confirm(''Are you sure?'')) { var f document.createElement(''form''); f.style.display = ''none''; this.parentNode.appendChild(f); f.method = ''POST''; f.action this.href;var m = document.createElement(''input''); m.setAttribute(''type'', ''hidden''); m.setAttribute(''name'', ''_method''); m.setAttribute(''value'', ''delete''); f.appendChild(m);var s document.createElement(''input''); s.setAttribute(''type'', ''hidden''); s.setAttribute(''name'', ''authenticity_token''); s.setAttribute(''value'', ''WlfISBcCORGbldrv7wfTkgazXI7eZBRdCQONY1TYNEc=''); f.appendChild(s);f.submit(); };return false;">Delete</a> </td></tr></div> it looks like I should replace ''last_name'' in the Javascript function with ''household_people_attributes__last_name'', but that didn''t help. By the way, where can I learn these answers myself, instead of asking endless questions. I didn''t see anything about elm.up and elm.down except a prototype page that showed how to move around an ordered list. By the way, thanks for all the help. Bob On Jul 22, 7:05 am, Walter Lee Davis <wa...-HQgmohHLjDZWk0Htik3J/w@public.gmane.org> wrote:> On Jul 22, 2011, at 3:25 AM, Bob Smith wrote: > > > > > The purpose of this button is to make it easy to change the way my app > > stores names. The old way was with a first and last name for the whole > > family, with the sex and birthdays of all family members later. Now > > I''m trying to connect the names and birthdays, so any person in the > > family that has their name listed can come in. The easiest way I''ve > > come up with to move to the new way is with is a button that will copy > > the name to whatever person has their radio button selected when the > > button is pressed. > > > my radio buttons return the id number of a person record to a variable > > - @households.hoh. Rails is handling this fine. > > I''ll need to add to the update method to copy the new name for the hoh > > if the radio button was changed. > > > var hoh_chosen = $$(''input.hoh:checked''); - when I try this, nothing > > is selected, even with a radio button checked > > I''ve tried surrounding the radio_button call with a <div class="hoh"> > > and <div id="hoh"> with no luck. > > <%= radio_button "household", "hoh", person.id %> > > > To me, it looks like I''m either not setting the class name correctly, > > or not looking for them right. Please help. > > You need to add the class to the radio button itself. The HTML you > want to see in your browser looks like this: > > <input type="radio" class="hoh" id="household_hoh_123" > name="household_hoh" value="123" /> > > To add the class to the radio_button call, just add it in the options > hash: :class => ''hoh''. > > The reason that the JavaScript didn''t give you back anything was > because it didn''t match anything. But there''s a larger issue here. > Where is the name located in the current page when you have that radio > button selected? Is it in the label to the radio button, or elsewhere > on the same page in a find-able location? Because the code I gave you > earlier would only access the value of the found radio button, in this > case 123. If it''s in the label, then depending on whether it''s before > or after the radio, you could access it with > elm.previous(''label'').innerHTML or elm.next(''label'').innerHTML > > I can''t help but think that it would be much easier to fix this in the > controller, copy the chosen person (as a found object through AR) into > the correct relationship and save. > > Walter > > > > > Bob > > > On Jul 20, 9:44 am, Walter Lee Davis <wa...-HQgmohHLjDZWk0Htik3J/w@public.gmane.org> wrote: > >> On Jul 20, 2011, at 1:07 AM, Bob Smith wrote: > > >>> I have a partial called people that has a radio button called hoh > >>> for > >>> head of household. I''m trying to have JavaScript look at each person > >>> and find the one that has hoh=1. This record then has it''s name > >>> copied > >>> to another field used for mailings. The web page has each record > >>> from > >>> the partial with a different id, household_person_1001, > >>> household_person_1030, etc. I can''t see a way to get all the person > >>> records into a JavaScript array. Please help. > > >> Parts of this seem pretty easy, but there''s one thing you didn''t > >> mention -- where are the names stored? Are these radio buttons set up > >> with value="Bob Smith" or are they value="1030" (the ID)? > > >> If you apply a classname to these radio buttons, then it''s easy to > >> grab all of them. > > >> var hoh_chosen = $$(''input.hoh:checked''); > > >> Now you have all of the checked radio buttons with class="hoh" > >> applied > >> to them. You iterate over them and find the nearby associated mailing > >> field: > > >> hoh_chosen.each(function(elm){ > >> // here I''m making another guess about your layout, that > >> // you''ve added a div around the common inputs for each person, > >> and > >> // you''ve applied the classname mailing_name to that text field > >> var mailing = elm.up(''div'').down(''input.mailing_name''); > >> if(mailing){ > >> mailing.setValue(elm.getValue()); > >> // and that only works if the value of the radio is what you > >> want > >> } > > >> }); > > >> So lots of assumptions here, but it''s really quite terse to do with > >> Prototype if the value is there to steal. But if your radio buttons > >> only have the ID, then I wouldn''t set the mailing name here, but in > >> the controller after the form is submitted. There, you can look up > >> the > >> user by the ID chosen in your hoh radio, and it''s all there for you. > > >> Walter > > >>> Bob <bsm...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> > > >>> -- > >>> You received this message because you are subscribed to the Google > >>> Groups "Ruby on Rails: Talk" group. > >>> To post to this group, send email to rubyonrails- > >>> talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > >>> To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org > >>> . > >>> For more options, visit this group athttp://groups.google.com/group/rubyonrails-talk?hl=en > >>> . > > > -- > > You received this message because you are subscribed to the Google > > Groups "Ruby on Rails: Talk" group. > > To post to this group, send email to rubyonrails- > > talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > > To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org > > . > > For more options, visit this group athttp://groups.google.com/group/rubyonrails-talk?hl=en > > . > >-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Walter Lee Davis
2011-Jul-24 00:12 UTC
Re: Re: Any way to get all records from a partial into a JavaScript array to test?
On Jul 23, 2011, at 2:33 AM, Bob Smith wrote:> The problem with putting this in the controller is that there isn''t a > chosen person to add the name to until someone asks the > person which birthday is theirs from the list and selects the correct > radio_button. > > The class in the radio button worked perfectly, but now the elm.down > statements are the new problem.. > > Here is my Javascript function > function move(){ > var hoh = $$(''input.hoh:checked''); > hoh.each(function(elm){ > { > elm.up(''div'').down(''input.last_name'').value = $ > (''household_last_name'') > elm.up(''div'').down(''input.first_name'').value = $ > (''household_first_name'') > elm.up(''div'').down(''input.middle'').value = $ > (''household_middle'')This isn''t how you set a value in Prototype, or how you get one. If you have a form field with the ID ''household_last_name, you would use its value like this to set the field you grabbed from your DOM traversal with up() and down(): elm .up(''div'').down(''input.last_name'').setValue($F(''household_last_name'')); $F() is a shortcut for Element.getValue(''id''); But did you also apply a classname of last_name to the text field you are trying to populate with a value? If you didn''t, then your down() would fail, since there was nothing that matched that CSS selector. If it fails, you then cannot set its value either, because you don''t have a reference to the field. Walter> } > }) > } > > and the page source for these fields > <div id="person"><tr> > <td width=100><input checked="checked" class="hoh" > id="household_hoh_23" name="household[hoh]" type="radio" value="23" / >> </td> > <td><input autocomplete="off" > id="household_people_attributes__last_name" maxlength="25" > name="household[people_attributes][][last_name]" size="25" > style="text- > align: left" type="text" value="" /></td> > <td><input autocomplete="off" > id="household_people_attributes__first_name" maxlength="25" > name="household[people_attributes][][first_name]" size="25" > style="text-align: left" type="text" value="0" /></td> > <td><input autocomplete="off" id="household_people_attributes__middle" > maxlength="1" name="household[people_attributes][][middle]" size="1" > style="text-align: right" type="text" value="" /></td> > <td><input autocomplete="off" id="household_people_attributes__sex" > maxlength="1" name="household[people_attributes][][sex]" size="1" > style="text-align: right" type="text" value="F" /></td> > <td><input autocomplete="off" id="household_people_attributes__month_" > maxlength="2" name="household[people_attributes][][month_]" size="2" > style="text-align: right" type="text" value="11" /></td> > > <td><input autocomplete="off" id="household_people_attributes__day_" > maxlength="2" name="household[people_attributes][][day_]" size="2" > style="text-align: right" type="text" value="8" /></td> > <td><input autocomplete="off" id="household_people_attributes__year_" > maxlength="4" name="household[people_attributes][][year_]" size="4" > style="text-align: right" type="text" value="1983" /></td> > <td> > <input id="household_people_attributes__id" > name="household[people_attributes][][id]" type="hidden" value="23" /> > <a href="/people/23" onclick="if (confirm(''Are you sure?'')) { var f > document.createElement(''form''); f.style.display = ''none''; > this.parentNode.appendChild(f); f.method = ''POST''; f.action > this.href;var m = document.createElement(''input''); > m.setAttribute(''type'', ''hidden''); m.setAttribute(''name'', ''_method''); > m.setAttribute(''value'', ''delete''); f.appendChild(m);var s > document.createElement(''input''); s.setAttribute(''type'', ''hidden''); > s.setAttribute(''name'', ''authenticity_token''); s.setAttribute(''value'', > ''WlfISBcCORGbldrv7wfTkgazXI7eZBRdCQONY1TYNEc=''); > f.appendChild(s);f.submit(); };return false;">Delete</a> > > </td></tr></div> > > > it looks like I should replace ''last_name'' in the Javascript function > with ''household_people_attributes__last_name'', but that didn''t help. > By the way, where can I learn these answers myself, instead of asking > endless questions. I didn''t see anything about elm.up and elm.down > except a prototype page that showed how to move around an ordered > list. > > > By the way, thanks for all the help. > > Bob > > > > On Jul 22, 7:05 am, Walter Lee Davis <wa...-HQgmohHLjDZWk0Htik3J/w@public.gmane.org> wrote: >> On Jul 22, 2011, at 3:25 AM, Bob Smith wrote: >> >> >> >>> The purpose of this button is to make it easy to change the way my >>> app >>> stores names. The old way was with a first and last name for the >>> whole >>> family, with the sex and birthdays of all family members later. Now >>> I''m trying to connect the names and birthdays, so any person in the >>> family that has their name listed can come in. The easiest way I''ve >>> come up with to move to the new way is with is a button that will >>> copy >>> the name to whatever person has their radio button selected when the >>> button is pressed. >> >>> my radio buttons return the id number of a person record to a >>> variable >>> - @households.hoh. Rails is handling this fine. >>> I''ll need to add to the update method to copy the new name for the >>> hoh >>> if the radio button was changed. >> >>> var hoh_chosen = $$(''input.hoh:checked''); - when I try this, nothing >>> is selected, even with a radio button checked >>> I''ve tried surrounding the radio_button call with a <div >>> class="hoh"> >>> and <div id="hoh"> with no luck. >>> <%= radio_button "household", "hoh", person.id %> >> >>> To me, it looks like I''m either not setting the class name >>> correctly, >>> or not looking for them right. Please help. >> >> You need to add the class to the radio button itself. The HTML you >> want to see in your browser looks like this: >> >> <input type="radio" class="hoh" id="household_hoh_123" >> name="household_hoh" value="123" /> >> >> To add the class to the radio_button call, just add it in the options >> hash: :class => ''hoh''. >> >> The reason that the JavaScript didn''t give you back anything was >> because it didn''t match anything. But there''s a larger issue here. >> Where is the name located in the current page when you have that >> radio >> button selected? Is it in the label to the radio button, or elsewhere >> on the same page in a find-able location? Because the code I gave you >> earlier would only access the value of the found radio button, in >> this >> case 123. If it''s in the label, then depending on whether it''s before >> or after the radio, you could access it with >> elm.previous(''label'').innerHTML or elm.next(''label'').innerHTML >> >> I can''t help but think that it would be much easier to fix this in >> the >> controller, copy the chosen person (as a found object through AR) >> into >> the correct relationship and save. >> >> Walter >> >> >> >>> Bob >> >>> On Jul 20, 9:44 am, Walter Lee Davis <wa...-HQgmohHLjDZWk0Htik3J/w@public.gmane.org> wrote: >>>> On Jul 20, 2011, at 1:07 AM, Bob Smith wrote: >> >>>>> I have a partial called people that has a radio button called hoh >>>>> for >>>>> head of household. I''m trying to have JavaScript look at each >>>>> person >>>>> and find the one that has hoh=1. This record then has it''s name >>>>> copied >>>>> to another field used for mailings. The web page has each record >>>>> from >>>>> the partial with a different id, household_person_1001, >>>>> household_person_1030, etc. I can''t see a way to get all the >>>>> person >>>>> records into a JavaScript array. Please help. >> >>>> Parts of this seem pretty easy, but there''s one thing you didn''t >>>> mention -- where are the names stored? Are these radio buttons >>>> set up >>>> with value="Bob Smith" or are they value="1030" (the ID)? >> >>>> If you apply a classname to these radio buttons, then it''s easy to >>>> grab all of them. >> >>>> var hoh_chosen = $$(''input.hoh:checked''); >> >>>> Now you have all of the checked radio buttons with class="hoh" >>>> applied >>>> to them. You iterate over them and find the nearby associated >>>> mailing >>>> field: >> >>>> hoh_chosen.each(function(elm){ >>>> // here I''m making another guess about your layout, that >>>> // you''ve added a div around the common inputs for each person, >>>> and >>>> // you''ve applied the classname mailing_name to that text field >>>> var mailing = elm.up(''div'').down(''input.mailing_name''); >>>> if(mailing){ >>>> mailing.setValue(elm.getValue()); >>>> // and that only works if the value of the radio is what you >>>> want >>>> } >> >>>> }); >> >>>> So lots of assumptions here, but it''s really quite terse to do with >>>> Prototype if the value is there to steal. But if your radio buttons >>>> only have the ID, then I wouldn''t set the mailing name here, but in >>>> the controller after the form is submitted. There, you can look up >>>> the >>>> user by the ID chosen in your hoh radio, and it''s all there for >>>> you. >> >>>> Walter >> >>>>> Bob <bsm...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> >> >>>>> -- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "Ruby on Rails: Talk" group. >>>>> To post to this group, send email to rubyonrails- >>>>> talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org >>>>> To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org >>>>> . >>>>> For more options, visit this group athttp://groups.google.com/group/rubyonrails-talk?hl=en >>>>> . >> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Ruby on Rails: Talk" group. >>> To post to this group, send email to rubyonrails- >>> talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org >>> To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org >>> . >>> For more options, visit this group athttp://groups.google.com/group/rubyonrails-talk?hl=en >>> . >> >> > > -- > You received this message because you are subscribed to the Google > Groups "Ruby on Rails: Talk" group. > To post to this group, send email to rubyonrails- > talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org > . > For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en > . >-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Bob Smith
2011-Aug-25 04:26 UTC
Re: Any way to get all records from a partial into a JavaScript array to test?
By the way, this is what I ended up with.. var hoh = $$(''input.hoh:checked''); hoh.each(function(elm){ { elm.up(1).down(''input.last_name'').value $F(''household_last_name'') elm.up(1).down(''input.first_name'').value $F(''household_first_name'') elm.up(1).down(''input.middle'').value = $F(''household_middle'') } }) } it turns out that there were a few partials, etc.. between the cells I was after, so the up and down calls were useless. This just got the values needed with $f and out them in local cells that I could access. Bob On Jul 23, 8:12 pm, Walter Lee Davis <wa...-HQgmohHLjDZWk0Htik3J/w@public.gmane.org> wrote:> On Jul 23, 2011, at 2:33 AM, Bob Smith wrote: > > > > > The problem with putting this in the controller is that there isn''t a > > chosen person to add the name to until someone asks the > > person which birthday is theirs from the list and selects the correct > >radio_button. > > > The class in the radio button worked perfectly, but now the elm.down > > statements are the new problem.. > > > Here is my Javascript function > > function move(){ > > var hoh = $$(''input.hoh:checked''); > > hoh.each(function(elm){ > > { > > elm.up(''div'').down(''input.last_name'').value = $ > > (''household_last_name'') > > elm.up(''div'').down(''input.first_name'').value = $ > > (''household_first_name'') > > elm.up(''div'').down(''input.middle'').value = $ > > (''household_middle'') > > This isn''t how you set a value in Prototype, or how you get one. > > If you have a form field with theID''household_last_name, you would > use its value like this to set the field you grabbed from your DOM > traversal with up() and down(): > > elm > .up(''div'').down(''input.last_name'').setValue($F(''household_last_name'')); > > $F() is a shortcut for Element.getValue(''id''); > > But did you also apply a classname of last_name to the text field you > are trying to populate with a value? If you didn''t, then your down() > would fail, since there was nothing that matched that CSS selector. If > it fails, you then cannot set its value either, because you don''t have > a reference to the field. > > Walter > > > } > > }) > > } > > > and the page source for these fields > > <divid="person"><tr> > > <td width=100><input checked="checked" class="hoh" > >id="household_hoh_23" name="household[hoh]" type="radio" value="23" / > >> </td> > > <td><input autocomplete="off" > >id="household_people_attributes__last_name" maxlength="25" > > name="household[people_attributes][][last_name]" size="25" > > style="text- > > align: left" type="text" value="" /></td> > > <td><input autocomplete="off" > >id="household_people_attributes__first_name" maxlength="25" > > name="household[people_attributes][][first_name]" size="25" > > style="text-align: left" type="text" value="0" /></td> > > <td><input autocomplete="off"id="household_people_attributes__middle" > > maxlength="1" name="household[people_attributes][][middle]" size="1" > > style="text-align: right" type="text" value="" /></td> > > <td><input autocomplete="off"id="household_people_attributes__sex" > > maxlength="1" name="household[people_attributes][][sex]" size="1" > > style="text-align: right" type="text" value="F" /></td> > > <td><input autocomplete="off"id="household_people_attributes__month_" > > maxlength="2" name="household[people_attributes][][month_]" size="2" > > style="text-align: right" type="text" value="11" /></td> > > > <td><input autocomplete="off"id="household_people_attributes__day_" > > maxlength="2" name="household[people_attributes][][day_]" size="2" > > style="text-align: right" type="text" value="8" /></td> > > <td><input autocomplete="off"id="household_people_attributes__year_" > > maxlength="4" name="household[people_attributes][][year_]" size="4" > > style="text-align: right" type="text" value="1983" /></td> > > <td> > > <inputid="household_people_attributes__id" > > name="household[people_attributes][][id]" type="hidden" value="23" /> > > <a href="/people/23" onclick="if (confirm(''Are you sure?'')) { var f > > document.createElement(''form''); f.style.display = ''none''; > > this.parentNode.appendChild(f); f.method = ''POST''; f.action > > this.href;var m = document.createElement(''input''); > > m.setAttribute(''type'', ''hidden''); m.setAttribute(''name'', ''_method''); > > m.setAttribute(''value'', ''delete''); f.appendChild(m);var s > > document.createElement(''input''); s.setAttribute(''type'', ''hidden''); > > s.setAttribute(''name'', ''authenticity_token''); s.setAttribute(''value'', > > ''WlfISBcCORGbldrv7wfTkgazXI7eZBRdCQONY1TYNEc=''); > > f.appendChild(s);f.submit(); };return false;">Delete</a> > > > </td></tr></div> > > > it looks like I should replace ''last_name'' in the Javascript function > > with ''household_people_attributes__last_name'', but that didn''t help. > > By the way, where can I learn these answers myself, instead of asking > > endless questions. I didn''t see anything about elm.up and elm.down > > except a prototype page that showed how to move around an ordered > > list. > > > By the way, thanks for all the help. > > > Bob > > > On Jul 22, 7:05 am, Walter Lee Davis <wa...-HQgmohHLjDZWk0Htik3J/w@public.gmane.org> wrote: > >> On Jul 22, 2011, at 3:25 AM, Bob Smith wrote: > > >>> The purpose of this button is to make it easy to change the way my > >>> app > >>> stores names. The old way was with a first and last name for the > >>> whole > >>> family, with the sex and birthdays of all family members later. Now > >>> I''m trying to connect the names and birthdays, so any person in the > >>> family that has their name listed can come in. The easiest way I''ve > >>> come up with to move to the new way is with is a button that will > >>> copy > >>> the name to whatever person has their radio button selected when the > >>> button is pressed. > > >>> my radio buttons return theidnumber of a personrecordto a > >>> variable > >>> - @households.hoh. Rails is handling this fine. > >>> I''ll need to add to the update method to copy the new name for the > >>> hoh > >>> if the radio button was changed. > > >>> var hoh_chosen = $$(''input.hoh:checked''); - when I try this, nothing > >>> is selected, even with a radio button checked > >>> I''ve tried surrounding theradio_buttoncall with a <div > >>> class="hoh"> > >>> and <divid="hoh"> with no luck. > >>> <%=radio_button"household", "hoh", person.id%> > > >>> To me, it looks like I''m eithernotsetting the class name > >>> correctly, > >>> ornotlooking for them right. Please help. > > >> You need to add the class to the radio button itself. The HTML you > >> want to see in your browser looks like this: > > >> <input type="radio" class="hoh"id="household_hoh_123" > >> name="household_hoh" value="123" /> > > >> To add the class to theradio_buttoncall, just add it in the options > >> hash: :class => ''hoh''. > > >> The reason that the JavaScript didn''t give you back anything was > >> because it didn''t match anything. But there''s a larger issue here. > >> Where is the name located in the current page when you have that > >> radio > >> button selected? Is it in the label to the radio button, or elsewhere > >> on the same page in a find-able location? Because the code I gave you > >> earlier would only access the value of the found radio button, in > >> this > >> case 123. If it''s in the label, then depending on whether it''s before > >> or after the radio, you could access it with > >> elm.previous(''label'').innerHTML or elm.next(''label'').innerHTML > > >> I can''t help but think that it would be much easier to fix this in > >> the > >> controller, copy the chosen person (as a found object through AR) > >> into > >> the correct relationship and save. > > >> Walter > > >>> Bob > > >>> On Jul 20, 9:44 am, Walter Lee Davis <wa...-HQgmohHLjDZWk0Htik3J/w@public.gmane.org> wrote: > >>>> On Jul 20, 2011, at 1:07 AM, Bob Smith wrote: > > >>>>> I have a partial called people that has a radio button called hoh > >>>>> for > >>>>> head of household. I''m trying to have JavaScript look at each > >>>>> person > >>>>> and find the one that has hoh=1. Thisrecordthen has it''s name > >>>>> copied > >>>>> to another field used for mailings. The web page has eachrecord > >>>>> from > >>>>> the partial with a differentid, household_person_1001, > >>>>> household_person_1030, etc. I can''t see a way to get all the > >>>>> person > >>>>> records into a JavaScript array. Please help. > > >>>> Parts of this seem pretty easy, but there''s one thing you didn''t > >>>> mention -- where are the names stored? Are these radio buttons > >>>> set up > >>>> with value="Bob Smith" or are they value="1030" (theID)? > > >>>> If you apply a classname to these radio buttons, then it''s easy to > >>>> grab all of them. > > >>>> var hoh_chosen = $$(''input.hoh:checked''); > > >>>> Now you have all of the checked radio buttons with class="hoh" > >>>> applied > >>>> to them. You iterate over them and find the nearby associated > >>>> mailing > >>>> field: > > >>>> hoh_chosen.each(function(elm){ > >>>> // here I''m making another guess about your layout, that > >>>> // you''ve added a div around the common inputs for each person, > >>>> and > >>>> // you''ve applied the classname mailing_name to that text field > >>>> var mailing = elm.up(''div'').down(''input.mailing_name''); > >>>> if(mailing){ > >>>> mailing.setValue(elm.getValue()); > >>>> // and that only works if the value of the radio is what you > >>>> want > >>>> } > > >>>> }); > > >>>> So lots of assumptions here, but it''s really quite terse to do with > >>>> Prototype if the value is there to steal. But if your radio buttons > >>>> only have theID, then I wouldn''t set the mailing name here, but in > >>>> the controller after the form is submitted. There, you can look up > >>>> the > >>>> user by theIDchosen in your hoh radio, and it''s all there for > >>>> you. > > >>>> Walter > > >>>>> Bob <bsm...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> > > >>>>> -- > >>>>> You received this message because you are subscribed to the Google > >>>>> Groups "Ruby on Rails: Talk" group. > >>>>> To post to this group, send email to rubyonrails- > >>>>> talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > >>>>> To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org > >>>>> . > >>>>> For more options, visit this group athttp://groups.google.com/group/rubyonrails-talk?hl=en > >>>>> . > > >>> -- > >>> You received this message because you are subscribed to the Google > >>> Groups "Ruby on Rails: Talk" group. > >>> To post to this group, send email to rubyonrails- > >>> talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > >>> To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org > >>> . > >>> For more options, visit this group athttp://groups.google.com/group/rubyonrails-talk?hl=en > >>> . > > > -- > > You received this message because you are subscribed to the Google > > Groups "Ruby on Rails: Talk" group. > > To post to this group, send email to rubyonrails- > > talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > > To unsubscribe from this > > ... > > read more »-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Walter Lee Davis
2011-Aug-25 12:47 UTC
Re: Re: Any way to get all records from a partial into a JavaScript array to test?
On Aug 25, 2011, at 12:26 AM, Bob Smith wrote:> By the way, this is what I ended up with.. > > var hoh = $$(''input.hoh:checked''); > hoh.each(function(elm){ > { > elm.up(1).down(''input.last_name'').value > $F(''household_last_name'') > elm.up(1).down(''input.first_name'').value > $F(''household_first_name'') > elm.up(1).down(''input.middle'').value = $F(''household_middle'') > } > }) > } > > it turns out that there were a few partials, etc.. between the cells I > was after, so the up and down calls were useless. This just got the > values needed with $f and out them in local cells that I could access.Excellent. Now one tiny refinement to recommend: replace value = val with setValue(val). It''s just a little bit safer cross-browser. Walter -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.