Insert javascript call inside <body onLoad=function()> in RAILS
Asked Answered
A

3

2

I am n00b at rails. The question is very simple, i want to know how can i make a javascript function call inside body tag on the onLoad event.

I'm asking this because in the views i can't find any body or head tag (It's like they are generated elsewhere).

Thanks

Acidulant answered 26/11, 2009 at 20:8 Comment(0)
C
4

You do not need to modify the body tag to associate a Javascript function with onload. Instead of using the onload attribute on the body, you can assign the function to window.onload inside an external Javascript file.

There are more advanced ways, using event listeners to do the same thing (trigger the function on page load) which would allow to add several listener functions or trigger functions on DOM ready, a little/some time before page load. Just setting window.onload is the most simple way, and will keep your Javascript unobtrusive.

Cincinnati answered 26/11, 2009 at 21:7 Comment(0)
U
2

The body and head tag would usually be defined in one of the layouts. Layouts are by default located in app/views/layouts.

Unscientific answered 26/11, 2009 at 20:57 Comment(2)
I have notticed the head and body tags within the layouts files but... what's the layout that is tied in with my view... I mean, i cannot see a one to one relationship between layouts and views. How and where i can tie in a layout with a view. ThanksAcidulant
A nice Rails guide about this subject (guides.rubyonrails.org/layouts_and_rendering.html) exists. I suggest you check it out as it explains all the "magic" behind layout/view/partial rendering.Unscientific
P
2

Eric Bréchemier and mtyaka are both correct.

Another approach (if you need to add custom elements to the header/footer that are specified on a per view basis, you'll want to do something like this with yield blocks

Here's an example allowing the title to be overriden on a per page basis, but the same technqiue applies to setting up script tags in the HTML head tag.

app/views/layouts/posts_layout.html.erb

<html>
  <head>
    <title><%= yield(:page_title) || "My awesome site"%></title>
  </head>
  <body><%= yield %> </body>
</html>

app/views/posts/index.html.erb

<%= content_for :page_title, "post listing" %>
<h1>Here are your posts...</h1>
Pentahedron answered 27/11, 2009 at 4:55 Comment(1)
Thanks a lot for your comment. I have been reading about the content_for tag. Very interesting but it seems to me that i cannot add attributes and events in that way, can I?Acidulant

© 2022 - 2024 — McMap. All rights reserved.