Rails阻止link_to,执行javascript函数,然后触发link_to

时间:2019-01-25 09:24:33

标签: javascript jquery ruby-on-rails ruby

当我用下面的函数中的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.");
   }
}

我不确定这是否可行,但是如果您可以想到另一种实现方法,那将非常有帮助。

2 个答案:

答案 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
}

尝试一下,让我知道你的生活,尽管我认为应该这样做!