Отправьте форму рельсов с javascript - PullRequest
1 голос
/ 02 мая 2020

У меня есть следующая форма:

 <% category.child_categories.sort_by(&:name).each do |child_category| %>
     <%= form_tag (search_path), :method => "get", class: "search-form" do %>
         <label for="checkData" style="cursor: pointer;" class="search">
           <%= hidden_field_tag :shop_search, child_category.id %>
             <i class="fas fa-search"></i> <%= child_category.name %>
          </label>
     <%= submit_tag '', :style => "display: none;" %>
     <% end %>
 <% end %>

Когда я нажимаю на ярлык и если куки [: координаты] существуют, форма отправляется с $(this).parent('form.search-form').trigger('submit.rails');:

$(".search").click(function(e){
    <% if cookies[:coordinates].blank? %>
        if (navigator.geolocation) {
            navigator.geolocation.getCurrentPosition(setGeoCookie, displayError);
        } else {
            alert("Geolocation is not supported by the browser you are currently using. Supported browsers: Chrome 5.0, Firefox 3.5, Internet Explorer 9.0, Opera 10.60, Safari 5.0");
        }


    function setGeoCookie(position) {
        let cookieName = "coordinates";
        let now = new Date();
        let time = now.getTime();
        time += 3600 * 5000;
        now.setTime(time);
        let cookie_val = position.coords.latitude + "|" + position.coords.longitude;
        document.cookie = cookieName +"=" + cookie_val + '; path=/';
        $(this).parent('form.search-form').trigger('submit.rails');
    }


    function displayError(error) {
        let errors = {
            1: 'error',
            2: 'Position unavailable',
            3: 'Request timeout'
        };
        alert("Error: " + errors[error.code]);
        window.location.reload(true)

    }
    getLocation();
    <% else%>
    $(this).parent('form.search-form').trigger('submit.rails');
    <% end %>
});

И когда куки [: координаты] не существует, я должен сначала создать повара ie, а затем вызвать форму внутри function setGeoCookie. Но по какой-то странной причине форма не представляется. Есть идеи, что я могу делать не так?

1 Ответ

1 голос
/ 02 мая 2020

Внутри функции $(this) есть еще одна область. Попробуйте сохранить форму перед выполнением функции. Тогда это должно сработать.

$(".search").click(function(e){
    var form = $(this).parent('form.search-form')
    <% if cookies[:coordinates].blank? %>
        if (navigator.geolocation) {
            navigator.geolocation.getCurrentPosition(setGeoCookie, displayError);
        } else {
            alert("Geolocation is not supported by the browser you are currently using. Supported browsers: Chrome 5.0, Firefox 3.5, Internet Explorer 9.0, Opera 10.60, Safari 5.0");
        }


    function setGeoCookie(position) {
        let cookieName = "coordinates";
        let now = new Date();
        let time = now.getTime();
        time += 3600 * 5000;
        now.setTime(time);
        let cookie_val = position.coords.latitude + "|" + position.coords.longitude;
        document.cookie = cookieName +"=" + cookie_val + '; path=/';
        form.trigger('submit.rails');
    }


    function displayError(error) {
        let errors = {
            1: 'error',
            2: 'Position unavailable',
            3: 'Request timeout'
        };
        alert("Error: " + errors[error.code]);
        window.location.reload(true)

    }
    getLocation();
    <% else%>
    form.trigger('submit.rails');
    <% end %>
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...