I am trying to accomplish an observe_field in rails 3.
In rails 2.3.5 I have :-
<%= observe_field ''query'', :frequency => 2,
:update => "search_results",
:url => {:controller => params[:area], :action =>
"search",:area => params[:area]},
:method=>:get,
:with => "query" %>
Which works fine, checking my text_field_tag "query" and updating my
"search_results" every two seconds. This is what I am trying to
simulate using prototype.
At the moment I have in a basic application in Rails 3:-
<script>
document.observe("dom:loaded", function() {
$(''search'').observe(''change'',
respondToChange());
});
</script>
or
<script>
document.observe("dom:loaded", function() {
new Form.Element.Observer(
''search'',
1,
respondToChange()
) });
</script>
both of which triggers the respondToChange function when the page
loads, despite the "dom:loaded", and then does not observes anymore.
Does anyone have any idea of how I might obtain the repeated observer
checks on my "search" text_field_tag.
--
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.
With thanks to "themiddleman" and "agnaki" somewhere out
there in the
ether, I have solved the problem:-
Use respondToChange not respondToChange()
As the parensthesis () execute the function wheras without () it
references it.
$(''search'').observe(''change'',
respondToChange()); only triggers when
the focus is moved away from the text_field.
new Form.Element.Observer(
''search'',
1,
respondToChange()
) }); ................................repeatedly checks the text_field
and call the function every 1 second if there is a any change.
I now only have one small problem.
How to call the "form_tag" from the function.
Anyone have any ideas.
--
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.
On Nov 12, 2010, at 9:08 PM, MDM wrote:> With thanks to "themiddleman" and "agnaki" somewhere out there in the > ether, I have solved the problem:- > > Use respondToChange not respondToChange() > > As the parensthesis () execute the function wheras without () it > references it. > > $(''search'').observe(''change'', respondToChange()); only triggers when > the focus is moved away from the text_field. > > new Form.Element.Observer( > ''search'', > 1, > respondToChange() > ) }); ................................repeatedly checks the text_field > and call the function every 1 second if there is a any change. > > I now only have one small problem. > How to call the "form_tag" from the function. > Anyone have any ideas. >You might try this.up(''form'') inside your function, as inside the anonymous function, this is set to the ''search'' field. If that doesn''t work, you can always do it long-hand with myForm = $ (''search'').up(''form''). 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.
Walter Many thanks I have cracked it.
$(''search'').up(''form'').submit()
I will post the whole code later. I owe you a drink. Contact me on
donsgarden.co.uk
Don
On Nov 13, 1:48 pm, Walter Lee Davis
<wa...-HQgmohHLjDZWk0Htik3J/w@public.gmane.org>
wrote:> On Nov 12, 2010, at 9:08 PM, MDM wrote:
>
>
>
> > With thanks to "themiddleman" and "agnaki"
somewhere out there in the
> > ether, I have solved the problem:-
>
> > Use respondToChange not respondToChange()
>
> > As the parensthesis () execute the function wheras without () it
> > references it.
>
> > $(''search'').observe(''change'',
respondToChange()); only triggers when
> > the focus is moved away from the text_field.
>
> > new Form.Element.Observer(
> > ''search'',
> > 1,
> > respondToChange()
> > ) }); ................................repeatedly checks the text_field
> > and call the function every 1 second if there is a any change.
>
> > I now only have one small problem.
> > How to call the "form_tag" from the function.
> > Anyone have any ideas.
>
> You might try this.up(''form'') inside your function, as
inside the
> anonymous function, this is set to the ''search'' field. If
that doesn''t
> work, you can always do it long-hand with myForm = $
> (''search'').up(''form'').
>
> 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@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.
Here is my full code if anyone is interested. This code Observes the
text_field_tag "search" every 2 seconds and if there is a change in
the value it triggers a search automatically. The submit button can
now be done away with I think. I might add ":autocomplete =>
"off", :onKeyPress=>"return disableEnterKey(event)")
%>" to the
text_field_tag to disable the return key, not sure.
In my index.html.erb I have:-
<h1>Listing homepages</h1>
<div id = "testsearch">
<%=render :partial => ''homepage''%>
</div>
<%= form_tag homepages_path, :method => ''get'',
:remote => true do
%>
<%= label_tag(:search, "Search for:") %>
<%= text_field_tag :search, params[:search]%>
<%= submit_tag "search", :name => nil %>
<%end%>
<%= set_focus_to_id ''search'' %> // I
have a helper
"set_focus_to_id"
<script>
document.observe("dom:loaded", function() { // ensures the page
is loaded first
new Form.Element.Observer( // Observes
the text_field_tag every 2 seconds
''search'',
2,
respondToChange //refrences the function
in the Layout <head>
) // on a
change in search calls respondToChange
});
</script>
<br />
<%= link_to ''New Homepage'', new_homepage_path %>
In my application Layout head I have:_
<script>
function respondToChange() {
$(''search'').up(''form'').submit()
// The ".up finds the
form in the DOM"
};
</script
In my controller#index I have:-
def index
@homepages = Homepage.search(params[:search]) //".search method
is in the Model"
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @homepages }
format.js
end
end
In my Model I have:-
def self.search(search_item)
if search_item
self.where(''section LIKE ?'',
"%#{search_item}%") //Handles
the ajax call.
else
self.all //Handles
the html call on startup.
end
end
In the helper I have:-
def set_focus_to_id(id)
javascript_tag("$(''#{id}'').focus()");
end
In the "_homepage" partial I have:-
<table>
<tr>
<th>Id</th>
<th>Section</th>
<th>Link</th>
<th>Description</th>
<th></th>
<th></th>
<th></th>
</tr>
<% for homepage in @homepages %>
<tr>
<td><%= homepage.id %></td>
<td><%= homepage.section %></td>
<td><%= homepage.link %></td>
<td><%= homepage.description %></td>
<td><%= link_to ''Show'', homepage
%></td>
<td><%= link_to ''Edit'',
edit_homepage_path(homepage) %></td>
<td><%= link_to ''Destroy'', homepage, :confirm
=> ''Are you
sure?'', :method => :delete %></td>
</tr>
<%end%>
</table>
And in the index.js.erb I have:-
$(''testsearch'').update("<%=
escape_javascript(render :partial =>
''homepage'') %>");
If anyone has any comments on how I could improve this please contact
me or say so.
On Nov 14, 1:18 am, MDM <don.m...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
wrote:> Walter Many thanks I have cracked it.
>
> $(''search'').up(''form'').submit()
>
> I will post the whole code later. I owe you a drink. Contact me on
> donsgarden.co.uk
>
> Don
>
> On Nov 13, 1:48 pm, Walter Lee Davis
<wa...-HQgmohHLjDZWk0Htik3J/w@public.gmane.org> wrote:
>
> > On Nov 12, 2010, at 9:08 PM, MDM wrote:
>
> > > With thanks to "themiddleman" and "agnaki"
somewhere out there in the
> > > ether, I have solved the problem:-
>
> > > Use respondToChange not respondToChange()
>
> > > As the parensthesis () execute the function wheras without () it
> > > references it.
>
> > > $(''search'').observe(''change'',
respondToChange()); only triggers when
> > > the focus is moved away from the text_field.
>
> > > new Form.Element.Observer(
> > > ''search'',
> > > 1,
> > > respondToChange()
> > > ) }); ................................repeatedly checks the
text_field
> > > and call the function every 1 second if there is a any change.
>
> > > I now only have one small problem.
> > > How to call the "form_tag" from the function.
> > > Anyone have any ideas.
>
> > You might try this.up(''form'') inside your function,
as inside the
> > anonymous function, this is set to the ''search''
field. If that doesn''t
> > work, you can always do it long-hand with myForm = $
> > (''search'').up(''form'').
>
> > 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@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.
Thanks for posting...I''ve been trying to figure out how to do the same thing. On Sat, Nov 13, 2010 at 8:39 PM, MDM <don.mapp-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Here is my full code if anyone is interested. This code Observes the > text_field_tag "search" every 2 seconds and if there is a change in > the value it triggers a search automatically. The submit button can > now be done away with I think. I might add ":autocomplete => > "off", :onKeyPress=>"return disableEnterKey(event)") %>" to the > text_field_tag to disable the return key, not sure. > > In my index.html.erb I have:- > > <h1>Listing homepages</h1> > <div id = "testsearch"> > <%=render :partial => ''homepage''%> > </div> > <%= form_tag homepages_path, :method => ''get'', :remote => true do > %> > <%= label_tag(:search, "Search for:") %> > <%= text_field_tag :search, params[:search]%> > <%= submit_tag "search", :name => nil %> > <%end%> > > <%= set_focus_to_id ''search'' %> // I have a helper > "set_focus_to_id" > > <script> > document.observe("dom:loaded", function() { // ensures the page > is loaded first > new Form.Element.Observer( // Observes > the text_field_tag every 2 seconds > ''search'', > 2, > respondToChange //refrences the function > in the Layout <head> > ) // on a > change in search calls respondToChange > }); > </script> > <br /> > <%= link_to ''New Homepage'', new_homepage_path %> > > In my application Layout head I have:_ > > <script> > function respondToChange() { > $(''search'').up(''form'').submit() // The ".up finds the > form in the DOM" > }; > </script > > In my controller#index I have:- > > def index > @homepages = Homepage.search(params[:search]) //".search method > is in the Model" > respond_to do |format| > format.html # index.html.erb > format.xml { render :xml => @homepages } > format.js > end > end > > In my Model I have:- > > def self.search(search_item) > if search_item > self.where(''section LIKE ?'', "%#{search_item}%") //Handles > the ajax call. > else > self.all //Handles > the html call on startup. > end > end > > In the helper I have:- > > def set_focus_to_id(id) > javascript_tag("$(''#{id}'').focus()"); > end > > In the "_homepage" partial I have:- > > <table> > <tr> > <th>Id</th> > <th>Section</th> > <th>Link</th> > <th>Description</th> > <th></th> > <th></th> > <th></th> > </tr> > > <% for homepage in @homepages %> > > <tr> > <td><%= homepage.id %></td> > <td><%= homepage.section %></td> > <td><%= homepage.link %></td> > <td><%= homepage.description %></td> > <td><%= link_to ''Show'', homepage %></td> > <td><%= link_to ''Edit'', edit_homepage_path(homepage) %></td> > <td><%= link_to ''Destroy'', homepage, :confirm => ''Are you > sure?'', :method => :delete %></td> > </tr> > <%end%> > > </table> > > And in the index.js.erb I have:- > > $(''testsearch'').update("<%= escape_javascript(render :partial => > ''homepage'') %>"); > > If anyone has any comments on how I could improve this please contact > me or say so. > > On Nov 14, 1:18 am, MDM <don.m...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > Walter Many thanks I have cracked it. > > > > $(''search'').up(''form'').submit() > > > > I will post the whole code later. I owe you a drink. Contact me on > > donsgarden.co.uk > > > > Don > > > > On Nov 13, 1:48 pm, Walter Lee Davis <wa...-HQgmohHLjDZWk0Htik3J/w@public.gmane.org> wrote: > > > > > On Nov 12, 2010, at 9:08 PM, MDM wrote: > > > > > > With thanks to "themiddleman" and "agnaki" somewhere out there in the > > > > ether, I have solved the problem:- > > > > > > Use respondToChange not respondToChange() > > > > > > As the parensthesis () execute the function wheras without () it > > > > references it. > > > > > > $(''search'').observe(''change'', respondToChange()); only triggers when > > > > the focus is moved away from the text_field. > > > > > > new Form.Element.Observer( > > > > ''search'', > > > > 1, > > > > respondToChange() > > > > ) }); ................................repeatedly checks the > text_field > > > > and call the function every 1 second if there is a any change. > > > > > > I now only have one small problem. > > > > How to call the "form_tag" from the function. > > > > Anyone have any ideas. > > > > > You might try this.up(''form'') inside your function, as inside the > > > anonymous function, this is set to the ''search'' field. If that doesn''t > > > > work, you can always do it long-hand with myForm = $ > > > (''search'').up(''form''). > > > > > 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org<rubyonrails-talk%2Bunsubscribe-/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.
I just noticed that the form_tag does an ajax call when a submit button is pressed, but when it is submitted via a Form.Element.Observer it goes by html. Does anyone know how can I force the Form.element.Observer to send an ajax call instead of an html call. On Nov 14, 9:06 am, Anh Tang <anhnta...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Thanks for posting...I''ve been trying to figure out how to do the same > thing. > > On Sat, Nov 13, 2010 at 8:39 PM, MDM <don.m...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > Here is my full code if anyone is interested. This code Observes the > > text_field_tag "search" every 2 seconds and if there is a change in > > the value it triggers a search automatically. The submit button can > > now be done away with I think. I might add ":autocomplete => > > "off", :onKeyPress=>"return disableEnterKey(event)") %>" to the > > text_field_tag to disable the return key, not sure. > > > In my index.html.erb I have:- > > > <h1>Listing homepages</h1> > > <div id = "testsearch"> > > <%=render :partial => ''homepage''%> > > </div> > > <%= form_tag homepages_path, :method => ''get'', :remote => true do > > %> > > <%= label_tag(:search, "Search for:") %> > > <%= text_field_tag :search, params[:search]%> > > <%= submit_tag "search", :name => nil %> > > <%end%> > > > <%= set_focus_to_id ''search'' %> // I have a helper > > "set_focus_to_id" > > > <script> > > document.observe("dom:loaded", function() { // ensures the page > > is loaded first > > new Form.Element.Observer( // Observes > > the text_field_tag every 2 seconds > > ''search'', > > 2, > > respondToChange //refrences the function > > in the Layout <head> > > ) // on a > > change in search calls respondToChange > > }); > > </script> > > <br /> > > <%= link_to ''New Homepage'', new_homepage_path %> > > > In my application Layout head I have:_ > > > <script> > > function respondToChange() { > > $(''search'').up(''form'').submit() // The ".up finds the > > form in the DOM" > > }; > > </script > > > In my controller#index I have:- > > > def index > > @homepages = Homepage.search(params[:search]) //".search method > > is in the Model" > > respond_to do |format| > > format.html # index.html.erb > > format.xml { render :xml => @homepages } > > format.js > > end > > end > > > In my Model I have:- > > > def self.search(search_item) > > if search_item > > self.where(''section LIKE ?'', "%#{search_item}%") //Handles > > the ajax call. > > else > > self.all //Handles > > the html call on startup. > > end > > end > > > In the helper I have:- > > > def set_focus_to_id(id) > > javascript_tag("$(''#{id}'').focus()"); > > end > > > In the "_homepage" partial I have:- > > > <table> > > <tr> > > <th>Id</th> > > <th>Section</th> > > <th>Link</th> > > <th>Description</th> > > <th></th> > > <th></th> > > <th></th> > > </tr> > > > <% for homepage in @homepages %> > > > <tr> > > <td><%= homepage.id %></td> > > <td><%= homepage.section %></td> > > <td><%= homepage.link %></td> > > <td><%= homepage.description %></td> > > <td><%= link_to ''Show'', homepage %></td> > > <td><%= link_to ''Edit'', edit_homepage_path(homepage) %></td> > > <td><%= link_to ''Destroy'', homepage, :confirm => ''Are you > > sure?'', :method => :delete %></td> > > </tr> > > <%end%> > > > </table> > > > And in the index.js.erb I have:- > > > $(''testsearch'').update("<%= escape_javascript(render :partial => > > ''homepage'') %>"); > > > If anyone has any comments on how I could improve this please contact > > me or say so. > > > On Nov 14, 1:18 am, MDM <don.m...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > > Walter Many thanks I have cracked it. > > > > $(''search'').up(''form'').submit() > > > > I will post the whole code later. I owe you a drink. Contact me on > > > donsgarden.co.uk > > > > Don > > > > On Nov 13, 1:48 pm, Walter Lee Davis <wa...-HQgmohHLjDZWk0Htik3J/w@public.gmane.org> wrote: > > > > > On Nov 12, 2010, at 9:08 PM, MDM wrote: > > > > > > With thanks to "themiddleman" and "agnaki" somewhere out there in the > > > > > ether, I have solved the problem:- > > > > > > Use respondToChange not respondToChange() > > > > > > As the parensthesis () execute the function wheras without () it > > > > > references it. > > > > > > $(''search'').observe(''change'', respondToChange()); only triggers when > > > > > the focus is moved away from the text_field. > > > > > > new Form.Element.Observer( > > > > > ''search'', > > > > > 1, > > > > > respondToChange() > > > > > ) }); ................................repeatedly checks the > > text_field > > > > > and call the function every 1 second if there is a any change. > > > > > > I now only have one small problem. > > > > > How to call the "form_tag" from the function. > > > > > Anyone have any ideas. > > > > > You might try this.up(''form'') inside your function, as inside the > > > > anonymous function, this is set to the ''search'' field. If that doesn''t > > > > > work, you can always do it long-hand with myForm = $ > > > > (''search'').up(''form''). > > > > > 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org<rubyonrails-talk%2Bunsubscribe-/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@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
I think I have now solved the problem of doing an ajax call via
programming. I will have to check it out in all types of browsers, but
at the moment it is working in Firefox and Safari. I have now also
moved both javascript "document.observe("dom:loaded" and the
function
it calls "respondToChange()" to the application head with content_for.
All other files remain the same.
In my index.html.erb I now have:-
<h1>Listing homepages</h1>
<div id = "testsearch">
<%=render :partial => ''homepage''%>
</div>
<%= form_tag homepages_path, :method => ''get'', :remote
=> true do %>
<%= label_tag(:search, "Search for:") %>
<%= text_field_tag :search, params[:search]%>
<%= submit_tag "search", :name => nil %>
<%end%>
<%= set_focus_to_id ''search'' %>
<% content_for :search_javascript do %>
function respondToChange() {
var pars = ''search='' +
$(''search'').getValue()
new Ajax.Request("<%= homepages_path %>" ,{
method: ''get'',
parameters: pars
});
};
document.observe("dom:loaded", function() {
new Form.Element.Observer(
''search'',
2,
respondToChange
)
});
<% end %>
<br />
<%= link_to ''New Homepage'', new_homepage_path %>
In my application layout file I now have:-
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type"
content="text/html;charset=UTF-8" />
<title>GardenR3</title>
<%= stylesheet_link_tag :all %>
<%= javascript_include_tag :defaults %>
<%= csrf_meta_tag %>
<script>
<%= yield :search_javascript %>
</script>
</head>
<body>
<%= yield %>
</body>
</html>
On Nov 16, 1:43 am, MDM <don.m...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
wrote:> I just noticed that the form_tag does an ajax call when a submit
> button is pressed, but when it is submitted via a
> Form.Element.Observer it goes by html.
>
> Does anyone know how can I force the Form.element.Observer to send an
> ajax call instead of an html call.
>
> On Nov 14, 9:06 am, Anh Tang
<anhnta...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:
>
> > Thanks for posting...I''ve been trying to figure out how to do
the same
> > thing.
>
> > On Sat, Nov 13, 2010 at 8:39 PM, MDM
<don.m...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:
> > > Here is my full code if anyone is interested. This code Observes
the
> > > text_field_tag "search" every 2 seconds and if there is
a change in
> > > the value it triggers a search automatically. The submit button
can
> > > now be done away with I think. I might add ":autocomplete
=>
> > > "off", :onKeyPress=>"return
disableEnterKey(event)") %>" to the
> > > text_field_tag to disable the return key, not sure.
>
> > > In my index.html.erb I have:-
>
> > > <h1>Listing homepages</h1>
> > > <div id = "testsearch">
> > > <%=render :partial =>
''homepage''%>
> > > </div>
> > > <%= form_tag homepages_path, :method =>
''get'', :remote => true do
> > > %>
> > > <%= label_tag(:search, "Search for:") %>
> > > <%= text_field_tag :search, params[:search]%>
> > > <%= submit_tag "search", :name => nil %>
> > > <%end%>
>
> > > <%= set_focus_to_id ''search'' %>
// I have a helper
> > > "set_focus_to_id"
>
> > > <script>
> > > document.observe("dom:loaded", function() { //
ensures the page
> > > is loaded first
> > > new Form.Element.Observer( //
Observes
> > > the text_field_tag every 2 seconds
> > > ''search'',
> > > 2,
> > > respondToChange //refrences the
function
> > > in the Layout <head>
> > > ) // on
a
> > > change in search calls respondToChange
> > > });
> > > </script>
> > > <br />
> > > <%= link_to ''New Homepage'',
new_homepage_path %>
>
> > > In my application Layout head I have:_
>
> > > <script>
> > > function respondToChange() {
> > >
$(''search'').up(''form'').submit()
// The ".up finds the
> > > form in the DOM"
> > > };
> > > </script
>
> > > In my controller#index I have:-
>
> > > def index
> > > @homepages = Homepage.search(params[:search])
//".search method
> > > is in the Model"
> > > respond_to do |format|
> > > format.html # index.html.erb
> > > format.xml { render :xml => @homepages }
> > > format.js
> > > end
> > > end
>
> > > In my Model I have:-
>
> > > def self.search(search_item)
> > > if search_item
> > > self.where(''section LIKE ?'',
"%#{search_item}%") //Handles
> > > the ajax call.
> > > else
> > > self.all
//Handles
> > > the html call on startup.
> > > end
> > > end
>
> > > In the helper I have:-
>
> > > def set_focus_to_id(id)
> > >
javascript_tag("$(''#{id}'').focus()");
> > > end
>
> > > In the "_homepage" partial I have:-
>
> > > <table>
> > > <tr>
> > > <th>Id</th>
> > > <th>Section</th>
> > > <th>Link</th>
> > > <th>Description</th>
> > > <th></th>
> > > <th></th>
> > > <th></th>
> > > </tr>
>
> > > <% for homepage in @homepages %>
>
> > > <tr>
> > > <td><%= homepage.id %></td>
> > > <td><%= homepage.section %></td>
> > > <td><%= homepage.link %></td>
> > > <td><%= homepage.description %></td>
> > > <td><%= link_to ''Show'',
homepage %></td>
> > > <td><%= link_to ''Edit'',
edit_homepage_path(homepage) %></td>
> > > <td><%= link_to ''Destroy'',
homepage, :confirm => ''Are you
> > > sure?'', :method => :delete %></td>
> > > </tr>
> > > <%end%>
>
> > > </table>
>
> > > And in the index.js.erb I have:-
>
> > > $(''testsearch'').update("<%=
escape_javascript(render :partial =>
> > > ''homepage'') %>");
>
> > > If anyone has any comments on how I could improve this please
contact
> > > me or say so.
>
> > > On Nov 14, 1:18 am, MDM
<don.m...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:
> > > > Walter Many thanks I have cracked it.
>
> > > >
$(''search'').up(''form'').submit()
>
> > > > I will post the whole code later. I owe you a drink.
Contact me on
> > > > donsgarden.co.uk
>
> > > > Don
>
> > > > On Nov 13, 1:48 pm, Walter Lee Davis
<wa...-HQgmohHLjDZWk0Htik3J/w@public.gmane.org> wrote:
>
> > > > > On Nov 12, 2010, at 9:08 PM, MDM wrote:
>
> > > > > > With thanks to "themiddleman" and
"agnaki" somewhere out there in the
> > > > > > ether, I have solved the problem:-
>
> > > > > > Use respondToChange not respondToChange()
>
> > > > > > As the parensthesis () execute the function wheras
without () it
> > > > > > references it.
>
> > > > > >
$(''search'').observe(''change'',
respondToChange()); only triggers when
> > > > > > the focus is moved away from the text_field.
>
> > > > > > new Form.Element.Observer(
> > > > > > ''search'',
> > > > > > 1,
> > > > > > respondToChange()
> > > > > > ) }); ................................repeatedly
checks the
> > > text_field
> > > > > > and call the function every 1 second if there is a
any change.
>
> > > > > > I now only have one small problem.
> > > > > > How to call the "form_tag" from the
function.
> > > > > > Anyone have any ideas.
>
> > > > > You might try this.up(''form'') inside
your function, as inside the
> > > > > anonymous function, this is set to the
''search'' field. If that doesn''t
>
> > > > > work, you can always do it long-hand with myForm = $
> > > > >
(''search'').up(''form'').
>
> > > > > 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-/JYPxA39Uh4Ykp1iOSErHA@public.gmane.orgm.
> > > To unsubscribe from this group, send email to
> > >
rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org<rubyonrails-talk%2Bunsubscribe-/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@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.