I am successfully using Prototype replace() to dynamically replace a
select picker with a text field when the user chooses Add new... from
the bottom of the list. The behavior I would like to add to this is to
restore the original picker if the user blurs away from this new field.
From the API docs, the replace function is said to return a reference
to the object that was removed. Does this reference include all of the
original content?
Here''s what I''ve tried:
if($(''o_s'')){
var picker;
Event.observe(''o_s'',''change'',function(e){
if($F(''o_s'') == ''Add new.''){
if(picker = $(''o_s'').replace(''<input
type="text" id="o_s" name="o_s"
value="" />'')){
$(''o_s'').focus();
Event.observe(''o_s'',''blur'',function(e){
if($F(''o_s'') == ''''){
$(''o_s'').replace(picker)
}
});
}
}
});
}
I expect the newly-created text field to disappear when I leave it
empty and blur away from it. Instead, I see [object HTMLSelectElement]
appear AFTER the text field, not replacing it at all. I''ve tried
replacing the bare object reference with picker.nodeValue, but that
just gets me an error. Replace() needs an HTML string with the
replacement content, but I don''t know how to get that out of the
object.
I can almost understand why this is happening, but it''s not clear how
to work around it.
Any suggestions?
Thanks,
Walter
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---
Talking to myself here. I managed to work it out, but the number of
lines of code convince me that I am swimming upstream here. Any
recommendations for streamlining would be graciously accepted.
The following works, in a hackish sort of way:
var combo_box = function(e){
var picker = $(''o_s'').innerHTML;
if($F(''o_s'') = ''Add new...''){
if($(''o_s'').replace(''<input
type="text" id="o_s" name="o_s" value=""
/>'')){
$(''o_s'').focus();
Event.observe(''o_s'',''blur'',function(e){
txt = Event.element(e);
if(txt.value = ''''){
new Insertion.After(''o_s'',''<select
id="o_s" name="o_s" size="1">''
+ picker + ''</select>'');
Event.observe(''o_s'',''change'',combo_box);
txt.remove();
}
});
}
}
}
//inside an Event.observe(window...) call:
if($(''o_s'')){
Event.observe(''o_s'',''change'',combo_box);
}
Thanks,
Walter
On Jul 6, 2007, at 1:54 PM, Walter Lee Davis wrote:
>
> I am successfully using Prototype replace() to dynamically replace a
> select picker with a text field when the user chooses Add new... from
> the bottom of the list. The behavior I would like to add to this is to
> restore the original picker if the user blurs away from this new field.
>
> From the API docs, the replace function is said to return a reference
> to the object that was removed. Does this reference include all of the
> original content?
>
> Here''s what I''ve tried:
>
> if($(''o_s'')){
> var picker;
>
Event.observe(''o_s'',''change'',function(e){
> if($F(''o_s'') == ''Add new.''){
> if(picker = $(''o_s'').replace(''<input
type="text" id="o_s" name="o_s"
> value="" />'')){
> $(''o_s'').focus();
>
Event.observe(''o_s'',''blur'',function(e){
> if($F(''o_s'') == ''''){
> $(''o_s'').replace(picker)
> }
> });
> }
> }
> });
> }
>
> I expect the newly-created text field to disappear when I leave it
> empty and blur away from it. Instead, I see [object HTMLSelectElement]
> appear AFTER the text field, not replacing it at all. I''ve tried
> replacing the bare object reference with picker.nodeValue, but that
> just gets me an error. Replace() needs an HTML string with the
> replacement content, but I don''t know how to get that out of the
> object.
>
> I can almost understand why this is happening, but it''s not clear
how
> to work around it.
>
> Any suggestions?
>
> Thanks,
>
> Walter
>
>
> >
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---
Further echoes -- the following does not work in Safari... On Jul 6, 2007, at 3:11 PM, Walter Lee Davis wrote:> > Talking to myself here. I managed to work it out, but the number of > lines of code convince me that I am swimming upstream here. Any > recommendations for streamlining would be graciously accepted. > > The following works, in a hackish sort of way: > > var combo_box = function(e){ > var picker = $(''o_s'').innerHTML; > if($F(''o_s'') = ''Add new...''){ > if($(''o_s'').replace(''<input type="text" id="o_s" name="o_s" value="" > />'')){ > $(''o_s'').focus(); > Event.observe(''o_s'',''blur'',function(e){ > txt = Event.element(e); > if(txt.value = ''''){ > new Insertion.After(''o_s'',''<select id="o_s" name="o_s" size="1">'' > + picker + ''</select>''); > Event.observe(''o_s'',''change'',combo_box); > txt.remove(); > } > }); > } > } > } > //inside an Event.observe(window...) call: > if($(''o_s'')){ > Event.observe(''o_s'',''change'',combo_box); > } > > Thanks, > > Walter > > On Jul 6, 2007, at 1:54 PM, Walter Lee Davis wrote: > >> >> I am successfully using Prototype replace() to dynamically replace a >> select picker with a text field when the user chooses Add new... from >> the bottom of the list. The behavior I would like to add to this is to >> restore the original picker if the user blurs away from this new >> field. >> >> From the API docs, the replace function is said to return a reference >> to the object that was removed. Does this reference include all of the >> original content? >> >> Here''s what I''ve tried: >> >> if($(''o_s'')){ >> var picker; >> Event.observe(''o_s'',''change'',function(e){ >> if($F(''o_s'') == ''Add new.''){ >> if(picker = $(''o_s'').replace(''<input type="text" id="o_s" >> name="o_s" >> value="" />'')){ >> $(''o_s'').focus(); >> Event.observe(''o_s'',''blur'',function(e){ >> if($F(''o_s'') == ''''){ >> $(''o_s'').replace(picker) >> } >> }); >> } >> } >> }); >> } >> >> I expect the newly-created text field to disappear when I leave it >> empty and blur away from it. Instead, I see [object HTMLSelectElement] >> appear AFTER the text field, not replacing it at all. I''ve tried >> replacing the bare object reference with picker.nodeValue, but that >> just gets me an error. Replace() needs an HTML string with the >> replacement content, but I don''t know how to get that out of the >> object. >> >> I can almost understand why this is happening, but it''s not clear how >> to work around it. >> >> Any suggestions? >> >> Thanks, >> >> Walter >> >> >>> > > > >--~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---