Rails 5 загружает JS с турболинком

Мне сложно заставить работать javascript без перезагрузки страницы. Я считаю, что проблема связана с турбо-ссылками.

Я устанавливаю слушателя onsubmit в такую ​​форму

<%= form_for @cart, url: cart_path, html: {onsubmit: "addCart(event, #{@product.id})"} do |c| %>

Затем я отправляю форму через ajax следующим образом

function addCart(event, id){
   event.preventDefault();
   var quantity = $("#"+id+'_product_quantity').val()
   $.post('/cart/add', {
     product_id: id,
     quantity: quantity
   }, function(data, status, xhr){
     if(xhr.status !== 200){
       alert("There was an error. Please try again")
     }else {
       $("#"+id+'_product_submit').val("Added");
     }
   })
}

Все работает отлично, когда я перезагружаю страницу, но когда я перехожу на страницу по ссылке, javascript не вызывается. Странно то, что event.preventDefault() работает. Когда я полностью удалю javascript, форма будет отправлена ​​как обычная html-форма. Я новичок в jquery и не могу понять, как загрузить javascript.


person Sam M    schedule 07.03.2017    source источник
comment
Вы используете обратный вызов document.ready( ... ) jQuery?   -  person Mark    schedule 07.03.2017
comment
Нет. У меня создалось впечатление, что это необходимо только при подключении слушателей с помощью синтаксиса $ (# id) .submit ().   -  person Sam M    schedule 07.03.2017


Ответы (2)


Это может быть проблема с турбонаддувом. В вашем файле javascript окружите ваш код javascript с помощью

$(document).on('turbolinks:load', function() {
  // your code
});
person Mark    schedule 07.03.2017
comment
Это событие запускается, но все еще не работает. Думаю, проблема в том, как я прикрепляю слушателя - person Sam M; 07.03.2017
comment
Нет. Ничего не было - person Sam M; 07.03.2017

Так что это было связано с турболинками. Я не мог понять, как заставить его работать с турбо-ссылками, поэтому удалил строку //= require turbolinks из файла assets/javascripts/application.js.

person Sam M    schedule 07.03.2017