У меня есть файл javascript под названием "front.js", который загружается из "application.js", как обычно, с помощью этого кода:
//= require front
Внутри "front.js" у меня есть много функций, которые я хочу запустить, когда документ будет готов следующим образом:
$(document).ready(function() {
$("#test").click(function(event){
...
});
});
Но проблема в том, что "front.js" загружается только при обновлении страницы вручную (ctrl + r/f5), а не при переходе со страницы на страницу, поэтому мой код javascript не может быть выполнен по желанию. Возможно, это происходит от turbolinks, я не знаю, как справиться с этой проблемой. Когда я помещаю скрипты непосредственно в html файлы, он работает, но это определенно не так.
Может ли кто-нибудь помочь мне в этом, пожалуйста?
Есть три способа, которыми вы можете это сделать.
а. Вы можете обернуть свой код jquery внутри функции, а затем вызвать эту функцию при загрузке страницы. Если ваша функция готова, вы можете сделать следующее:
$(document).ready(ready);
$(document).on('page:load', ready);
б. Вы можете использовать событие jquery live или событие "on":
$(document).on("click","#test",function(){
// your code
});
с. Вы можете использовать jquery-turbolinks gem, который привяжет события Rails Turbolink к событиям document.ready, чтобы вы могли написать свой jQuery обычным способом. Для получения дополнительной информации см. Здесь
Это из-за турбовинтов, сделайте это вместо этого
var ready;
ready = function() {
$("#test").click(function(event){
...
});
};
$(document).ready(ready);
$(document).on('page:load', ready);
У меня была такая же проблема при использовании основы в моем проекте, вы можете отключить turoblinks, не требуя turbolinks в вашем файле application.js, и это должно решить проблему.