admin管理员组文章数量:1134232
I'm having some trouble loading my javascript when I use a link_to helper in rails. When I either manually enter the url with 'localhost:3000/products/new' or reload the page, the javascript loads, but when I go through a link as written below, the jQuery $(document).ready
will not load on the new page.
Link_to, javascript does not load when I click this link:
<%= link_to "New Product", new_product_path %>
products.js file
$(document).ready(function() {
alert("test");
});
Any help would be much appreciated. Thanks in advance!
I'm having some trouble loading my javascript when I use a link_to helper in rails. When I either manually enter the url with 'localhost:3000/products/new' or reload the page, the javascript loads, but when I go through a link as written below, the jQuery $(document).ready
will not load on the new page.
Link_to, javascript does not load when I click this link:
<%= link_to "New Product", new_product_path %>
products.js file
$(document).ready(function() {
alert("test");
});
Any help would be much appreciated. Thanks in advance!
Share Improve this question edited Aug 6, 2013 at 6:44 Ryan Endacott 9,1424 gold badges28 silver badges39 bronze badges asked Jul 11, 2013 at 17:48 StickMaNXStickMaNX 1,9822 gold badges16 silver badges13 bronze badges8 Answers
Reset to default 142Are you using Rails 4? (Find out by doing rails -v
in your console)
This issue is probably due to the newly added Turbolinks gem. It makes your application behave like a single page JavaScript application. It has a few benefits (it's faster), but it unfortunately breaks some existing events like $(document).ready()
because the page is never reloaded. That would explain why the JavaScript works when you directly load the URL, but not when you navigate to it through a link_to
.
Here's a RailsCast about Turbolinks.
There are a couple solutions. You can use jquery.turbolinks as a drop-in fix, or you can switch your $(document).ready()
statement to instead use the Turbolinks 'page:change'
event:
$(document).on('page:change', function() {
// your stuff here
});
Alternatively, you could do something like this for compatibility with regular page loads as well as Turbolinks:
var ready = function() {
// do stuff here.
};
$(document).ready(ready);
$(document).on('page:change', ready);
If you are using Ruby on Rails >5 (you can check by running rails -v
in the console) use 'turbolinks:load'
instead of 'page:change'
$(document).on('turbolinks:load', ready);
I got the same probleme but jquery.turbolinks doesn't helped. I noticed that I have to override the GET method.
There is my sample :
<%= link_to 'Edit', edit_interpreter_path(@interpreter), method: :get %>
If you are on rails 5 instead of 'page:change'
you should use 'turbolinks:load'
like this:
$(document).on('turbolinks:load', function() {
// Should be called at each visit
})
Source: https://stackoverflow.com/a/36110790
You can also wrap your link with a div that specifies data-no-turbolink.
Example:
<div id="some-div" data-no-turbolink>
<a href="/">Home (without Turbolinks)</a>
</div>
Source: https://github.com/rails/turbolinks
Make sure you don't have any inline <script>
tags. (Inline script tags are bad with turbolinks).
FWIW, from the Turbolinks docs, the more appropriate event to capture instead of the $(document).ready
is page:change
.
page:load
has a caveat that it doesn't fire on cache reloads...
A new body element has been loaded into the DOM. Does not fire on partial replacement or when a page is restored from cache, so as not to fire twice on the same body.
And since Turbolinks is just switching the view, page:change
is more appropriate.
The solution that solved my issue was adding this meta property.
<meta name="turbolinks-visit-control" content="reload">
This ensures visits to a certain page will always trigger a full reload.
This was incredibly useful for working on a solution to solve the issue I was having with this, https://github.com/turbolinks/turbolinks#reloading-when-assets-change .
If your link_to js is working after reload so it should be a turbolink issue, you can use turbolink false
on that link_to like for ex:
<%= link_to "Home", home_path, data: { turbolinks: false } %>
本文标签: jqueryRailsjavascript not loading after clicking through linkto helperStack Overflow
版权声明:本文标题:jquery - Rails, javascript not loading after clicking through link_to helper - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1736836194a1954903.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论