javascript - Rails 4 应用程序...在开发环境中,除非刷新页面,否则不会触发 javascript

标签 javascript ruby-on-rails ruby-on-rails-4

所以我的第一个 rails4 应用程序遇到了一个奇怪的问题,除非我重新加载页面,否则我的页面 javascript 不会触发。

这对于我的 Assets 管道 JS 和内联 content_for JS 都是如此。

在我的/assets/javascripts/cars.js 文件中:

$(function(){
    $("#car_car_make_id").on("change", function(){
        //SET MODELS
        $.ajax({
            url: "/car_makes/" + $(this).val() + "/car_models",
            type: "GET",
            dataType: "json",
            cache: false
        })
        .done(function(data) { model_list(data) })
        .fail(function() { alert("error"); })
    });
});

function model_list(data) {
    $("#car_car_model_id").empty();
    $.each(data, function(i,v){ 
        $("<option />").val(v.id).text(v.name).appendTo("#car_car_model_id");
    });
    //ON COMPLETE SHOW
    $("#car_model_div").show();
}

使用 content_for 在页面中内联:

<% content_for :head do %>
<script type="text/javascript">
    var tag = document.createElement('script');
    tag.src = "https://www.youtube.com/iframe_api";
    var firstScriptTag = document.getElementsByTagName('script')[0];
    firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

    var player;
    function onYouTubeIframeAPIReady() {
        player = new YT.Player('yt_vid', {
            height: '390',
            width: '640',
            videoId: '<%= @timeslip.youtube_id %>'
        });
    }
</script>
<% end %>

这两个只有在我刷新页面时才会触发。

例如,如果我单击指向带有 youtube 视频的页面的链接,它将不会加载。但如果我刷新它会。与 Assets 管道脚本相同,如果我先重新加载页面,它只会调用我的 ajax。

最佳答案

看起来像是新 Turbolinks 的副作用特征。当你点击一个链接时,页面不会被重新加载——它只是拥有它的 <body>。由 AJAX 请求加载。所以:

在第一种情况下,$(function{ ... })未运行,因为 document.ready仅在第一个页面加载时触发,不会重新加载正文。

在第二种情况下,<head>没有重新加载 turbolinks,只是 body 。所以你只剩下旧的 <script>而且它没有重新运行!

检查 turbolinks 的一些选项,例如 jquery.tubrolinks .

关于javascript - Rails 4 应用程序...在开发环境中,除非刷新页面,否则不会触发 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18524409/

相关文章:

ruby-on-rails - Rails 4 — 如何从 JSON API 填充用户模型?

javascript - Div 元素如何在 CSS3 Flexbox 中只占用其内部内容的空间?

javascript - 如何使用 javascript 检查/取消选中 ListView 内的所有 HTML 复选框

ruby-on-rails - 设置cookie。在Rails 5 Controller 集成测试中签名

ruby-on-rails - Heroku 的环境变量是存储敏感数据的安全方式吗?

ruby-on-rails - 为什么我不断收到此 ActiveRecord::AssociationTypeMismatch 错误?

ruby-on-rails - 测试 flash 消息的内容 : `The assertion was not run because of an invalid css selector`

javascript - 使用条件语句切换这个innerHTML的正确方法是什么?

javascript - 即使在删除了 JavaScript 事件处理程序所绑定(bind)的 DOM 元素后,内存中是否仍存在该事件处理程序?

ruby-on-rails - 工厂女孩似乎不喜欢 acts_as_singleton