繁体   English   中英

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

[英]Rails prevent link_to, execute a javascript function and then trigger link_to

我防止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.");
   }
}

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

如果默认重定向对您不起作用,则可以使用window.location.replace(...)执行lint_to路由,如下所示。

首先找到针对名为route search_path(:search => category.id)的url,我认为它应该类似于{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);
}

我会稍作调整,以使用链接的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
}

试试看,让我知道您的生活,尽管我认为应该这样做!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM