Javascript无法可靠执行 - RoR4

时间:2016-10-06 08:43:50

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

我有一个问题,我使用javascript检查所有/取消选中所有复选框,但是我导航到另一个网址的页面,它不会提交表单。当我刷新页面或直接输入URL时,它将起作用。我认为这可能是一个turbolinks问题,但我在网站上没有任何其他javascript的问题。在加载其他所有内容之后,我在页面末尾加载JS。

我的代码如下:

    $(document).ready(function(){
    var checkboxes = $("input[type='checkbox']");
    if(checkboxes.prop("checked")){
        document.getElementById("check_all").innerHTML = "Deselect All";
    }
    else {
        document.getElementById("check_all").innerHTML = "Select All";
    }
   $('#check_all').on("click", function() {
    if(checkboxes.prop("checked")){
        checkboxes.prop("checked",false);
        document.getElementById("check_all").innerHTML = "Select All";
    }
    else {
        checkboxes.prop("checked",true);
        document.getElementById("check_all").innerHTML = "Deselect All";
    }
  });
});

我使用Rails 4,有时会出现错误,如下所示: 未捕获的TypeError:无法设置属性< innerHTML'为null

1 个答案:

答案 0 :(得分:0)

很可能是Turbolinks的问题。

您的代码位于$(document).ready事件的处理程序中,该事件在页面加载足以在DOM上执行JS操作时触发。对于这类事情来说,这通常是正确的做法,但对于Turbolinks来说,它是不同的。

Turbolinks拦截链接点击,而不是重新加载页面,它为所需页面的主体发出AJAX请求,并将其交换为当前页面的主体。这使得$(document).ready事件不可靠 - 它可能不会被触发。因此,Turbolinks会在更改页面内容时触发事件:page:change

而不是

$(document).ready(function(){

使用

$(document).on('page:change', function () {