Rails предотвращают link_to, выполняют функцию javascript и затем запускают link_to - PullRequest
0 голосов
/ 25 января 2019

Я запрещаю link_to, когда я нажимаю на него с помощью ev.preventDefault(); внутри функции ниже ... функция javascript выполняется, но после этого я хочу, чтобы исходные ссылки link_to были нажаты для выполнения.

<% @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 голосов
/ 25 января 2019

Я бы немного подправил его, чтобы использовать ссылку 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
}

Попробуйте и дайте мне знать, как вы поживаете, хотя я думаю, что это следует сделать!

0 голосов
/ 25 января 2019

Вы можете использовать window.location.replace (...) , чтобы выполнить lint_to route, если перенаправление по умолчанию не работает для вас, как указано ниже.

Сначала найдите URL против namedroute 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...