当我用下面的函数中的link_to
单击ev.preventDefault();
时,我正在防止它执行... javascript函数得到执行,但是之后我希望单击原始的link_to thats被执行。
<% @categories.each do |category| %>
<%= link_to "#{category.name}", search_path(:search => category.id), :onclick=>'getLocation(event);' %>
<% end %>
function getLocation(ev) {
ev.preventDefault();
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(setGeoCookie,showError);
} else {
alert("Geolocation is not supported by this browser.");
}
}
我不确定这是否可行,但是如果您可以想到另一种实现方法,那将非常有帮助。
答案 0 :(得分:0)
如果默认重定向对您不起作用,则可以使用window.location.replace(...)执行lint_to路由。
首先找到针对命名路由search_path(:search => category.id)
的网址,我认为它应该类似于{your_host} /searches?search=category.id并将其传递给JS函数
<% @categories.each do |category| %>
<%= link_to "#{category.name}", search_path(:search => category.id), :onclick=>"getLocation({your_host}/searches?search=#{category.id});" %>
<% end %>
function getLocation(url) {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(setGeoCookie,showError);
} else {
alert("Geolocation is not supported by this browser.");
}
window.location.replace(url);
}
答案 1 :(得分:0)
我会稍作调整,以使用链接的href
进行重定向,并使用window.location=
本身移动页面。
这将显示警报并在警报被消除后重定向:
<% @categories.each do |category| %>
<%= link_to "#{category.name}", search_path(:search => category.id), :onclick=>'getLocation(event);' %>
<% end %>
function getLocation(ev) {
ev.preventDefault();
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(setGeoCookie,showError);
} else {
alert("Geolocation is not supported by this browser.");
}
window.location = ev.target.href
}
尝试一下,让我知道你的生活,尽管我认为应该这样做!