我有一个问题,我使用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
答案 0 :(得分:0)
很可能是Turbolinks的问题。
您的代码位于$(document).ready
事件的处理程序中,该事件在页面加载足以在DOM上执行JS操作时触发。对于这类事情来说,这通常是正确的做法,但对于Turbolinks来说,它是不同的。
Turbolinks拦截链接点击,而不是重新加载页面,它为所需页面的主体发出AJAX请求,并将其交换为当前页面的主体。这使得$(document).ready
事件不可靠 - 它可能不会被触发。因此,Turbolinks会在更改页面内容时触发事件:page:change
而不是
$(document).ready(function(){
使用
$(document).on('page:change', function () {