I''m having this problem with IE and getElementsBySelector, but am a relative js novice, so quite possible -- likely even -- that I''m doing something stupid. Either way, a fresh pair of eyes would help. Basically I''m duplicating a fieldset within a form (so you can upload more than one photo). [BTW, the fieldsets have a CSS id which relates to the object id of the existing photo (the form is also used for editing, so you need this so the user can replace replace them), or a pseuo id of the form "n_0", "n_1", ...] This is how I''m doing it (and I''m sure there must be a more elegant way, but as I said, just a js novice): var mostRecentForm = $$(''fieldset.photo_fields'').last(); // get the bottom fieldset var formNumber = mostRecentForm.id.replace(''photo_fields_'',''''); // find the photo'' s object id from the fieldsets CSS id var rx = /n_\d/; var newFormNumber = rx.test(formNumber) ? Number(formNumber.replace(''n_'','''')) + 1 : 0 ; // if the id looks like "n_?" then give it the next number, otherwise number it 0 new Insertion.After(mostRecentForm, ''<fieldset id="photo_fields_n_'' + newFormNumber + ''" class="photo_fields" style="display:none"></ fieldset>''); // add the new fieldset var newForm = $(''photo_fields_n_'' + newFormNumber); // find it and make it into an Element newForm.update(mostRecentForm.innerHTML); // copy the contents of the existing fieldset into it //fails at this next line newForm.getElementsBySelector(''legend'').first().update("Photo " + (Number(newFormNumber) + 1)); // update the legend newForm.getElementsBySelector(''textarea'', ''input[type="file"]'', ''input[type="text"]'').each(function(s) { s.id = s.id.replace(''photo_'' + formNumber, ''photo_n_'' + newFormNumber); s.name = s.name.replace(''photo['' + formNumber, ''photo[n_'' + newFormNumber); s.clear();}); //update the ids and names of the fields currentPhotos = document.getElementsByClassName("current_photo", newForm); // clear the contents new Effect.SlideDown(newForm); // show the new fieldset On Firefox, Safari and Opera, this all works fine (though the SlideDown is a bit jerky on FF). But on II (6 & 7) it fails on newForm.getElementsBySelector(''legend'').first() -- Object doesn''t support this property or method. Note it actually fails on the first(), not the getElementsBySelector. Any suggestions? I''ve tried everything I can think of but am now totally stumped. Thanks Chris --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Spinoffs" group. To post to this group, send email to rubyonrails-spinoffs-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-spinoffs-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-spinoffs?hl=en -~----------~----~----~----~------~----~------~--~---
I wonder if when you do the newForm.update IE is dropping the prototype extensions on the elements and these are needed for the .first? Gareth On 4/23/07, ChrisT <ctmailinglists-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org> wrote:> > > I''m having this problem with IE and getElementsBySelector, but am a > relative js novice, so quite possible -- likely even -- that I''m doing > something stupid. Either way, a fresh pair of eyes would help. > > Basically I''m duplicating a fieldset within a form (so you can upload > more than one photo). [BTW, the fieldsets have a CSS id which relates > to the object id of the existing photo (the form is also used for > editing, so you need this so the user can replace replace them), or a > pseuo id of the form "n_0", "n_1", ...] > > This is how I''m doing it (and I''m sure there must be a more elegant > way, but as I said, just a js novice): > > > var mostRecentForm = $$(''fieldset.photo_fields'').last(); // get the > bottom fieldset > var formNumber = mostRecentForm.id.replace(''photo_fields_'',''''); // > find the photo'' s object id from the fieldsets CSS id > var rx = /n_\d/; > var newFormNumber = rx.test(formNumber) ? > Number(formNumber.replace(''n_'','''')) + 1 : 0 ; // if the id looks like > "n_?" then give it the next number, otherwise number it 0 > new Insertion.After(mostRecentForm, ''<fieldset id="photo_fields_n_'' > + > newFormNumber + ''" class="photo_fields" style="display:none"></ > fieldset>''); // add the new fieldset > var newForm = $(''photo_fields_n_'' + newFormNumber); // find it and > make it into an Element > newForm.update(mostRecentForm.innerHTML); // copy the contents of > the > existing fieldset into it > //fails at this next line > newForm.getElementsBySelector(''legend'').first().update("Photo " + > (Number(newFormNumber) + 1)); // update the legend > newForm.getElementsBySelector(''textarea'', ''input[type="file"]'', > ''input[type="text"]'').each(function(s) { > s.id = s.id.replace(''photo_'' + > formNumber, ''photo_n_'' + > newFormNumber); > s.name = s.name.replace(''photo['' + > formNumber, ''photo[n_'' + > newFormNumber); > s.clear();}); //update the ids and > names of the fields > currentPhotos = document.getElementsByClassName("current_photo", > newForm); // clear the contents > new Effect.SlideDown(newForm); // show the new fieldset > > On Firefox, Safari and Opera, this all works fine (though the > SlideDown is a bit jerky on FF). But on II (6 & 7) it fails on > newForm.getElementsBySelector(''legend'').first() -- Object doesn''t > support this property or method. Note it actually fails on the > first(), not the getElementsBySelector. > > Any suggestions? I''ve tried everything I can think of but am now > totally stumped. > > Thanks > > Chris > > > > >--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Spinoffs" group. To post to this group, send email to rubyonrails-spinoffs-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-spinoffs-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-spinoffs?hl=en -~----------~----~----~----~------~----~------~--~---
I wondered if something like that was happening, but then I thought I read in the docs that getElementsBySelector added these to the returned elements automatically. On 23 Apr, 21:59, "Gareth Evans" <agr...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> I wonder if when you do the newForm.update IE is dropping the prototype > extensions on the elements and these are needed for the .first? > > Gareth > > On 4/23/07, ChrisT <ctmailingli...-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org> wrote: > > > > > I''m having this problem with IE and getElementsBySelector, but am a > > relative js novice, so quite possible -- likely even -- that I''m doing > > something stupid. Either way, a fresh pair of eyes would help. > > > Basically I''m duplicating a fieldset within a form (so you can upload > > more than one photo). [BTW, the fieldsets have a CSS id which relates > > to the object id of the existing photo (the form is also used for > > editing, so you need this so the user can replace replace them), or a > > pseuo id of the form "n_0", "n_1", ...] > > > This is how I''m doing it (and I''m sure there must be a more elegant > > way, but as I said, just a js novice): > > > var mostRecentForm = $$(''fieldset.photo_fields'').last(); // get the > > bottom fieldset > > var formNumber = mostRecentForm.id.replace(''photo_fields_'',''''); // > > find the photo'' s object id from the fieldsets CSS id > > var rx = /n_\d/; > > var newFormNumber = rx.test(formNumber) ? > > Number(formNumber.replace(''n_'','''')) + 1 : 0 ; // if the id looks like > > "n_?" then give it the next number, otherwise number it 0 > > new Insertion.After(mostRecentForm, ''<fieldset id="photo_fields_n_'' > > + > > newFormNumber + ''" class="photo_fields" style="display:none"></ > > fieldset>''); // add the new fieldset > > var newForm = $(''photo_fields_n_'' + newFormNumber); // find it and > > make it into an Element > > newForm.update(mostRecentForm.innerHTML); // copy the contents of > > the > > existing fieldset into it > > //fails at this next line > > newForm.getElementsBySelector(''legend'').first().update("Photo " + > > (Number(newFormNumber) + 1)); // update the legend > > newForm.getElementsBySelector(''textarea'', ''input[type="file"]'', > > ''input[type="text"]'').each(function(s) { > > s.id = s.id.replace(''photo_'' + > > formNumber, ''photo_n_'' + > > newFormNumber); > > s.name = s.name.replace(''photo['' + > > formNumber, ''photo[n_'' + > > newFormNumber); > > s.clear();}); //update the ids and > > names of the fields > > currentPhotos = document.getElementsByClassName("current_photo", > > newForm); // clear the contents > > new Effect.SlideDown(newForm); // show the new fieldset > > > On Firefox, Safari and Opera, this all works fine (though the > > SlideDown is a bit jerky on FF). But on II (6 & 7) it fails on > > newForm.getElementsBySelector(''legend'').first() -- Object doesn''t > > support this property or method. Note it actually fails on the > > first(), not the getElementsBySelector. > > > Any suggestions? I''ve tried everything I can think of but am now > > totally stumped. > > > Thanks > > > Chris--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Spinoffs" group. To post to this group, send email to rubyonrails-spinoffs-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-spinoffs-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-spinoffs?hl=en -~----------~----~----~----~------~----~------~--~---
Since its the call to .each that is failing, you might try wrapping your newForm.getElementsBySelector(...) call in $A() to see if it goes away. Just a suggestion that might help you track down what is going wrong. On Apr 24, 3:35 am, ChrisT <ctmailingli...-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org> wrote:> I wondered if something like that was happening, but then I thought I > read in the docs that getElementsBySelector added these to the > returned elements automatically.--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Spinoffs" group. To post to this group, send email to rubyonrails-spinoffs-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-spinoffs-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-spinoffs?hl=en -~----------~----~----~----~------~----~------~--~---