2016-10-06 9 views
0

JavaScriptを使用してすべてのチェックボックスをオフにする問題が発生していますが、別のURLのページに移動してもフォームは送信されません。ページを更新するか、URLを直接入力すると動作します。私はこれがturbolinksの問題かもしれないと思った、しかし私はサイトの他のjavascriptに問題がない。私はページの最後にJSをロードしています。他にすべてがロードされた後です。次のようにJavascriptが確実に実行されない - RoR4

私のコードは次のとおりです。

$(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プロパティ」を設定することはできません
+0

page:change

は、必ずあなたのJSスクリプト要素は、ページの一番下にある、または確認しますコードはonloadイベントの内部にあります。そうしないと、コード実行時に対象とする要素が存在しないことがあります。 – evolutionxbox

答えて

0

Turbolinksの問題である可能性があります。

$(document).readyイベントのハンドラ内のコードは、ページがDOM操作のために十分に読み込まれたときに起動します。これは通常、このようなことのための適切な練習ですが、ターボリンクではそれは異なります。

Turbolinksはリンクのクリックを傍受し、ページをリロードする代わりに、目的のページの本文に対してAJAXリクエストを行い、現在のページの本文にスワップインします。これにより、$(document).readyイベントは信頼できなくなります。起動されない可能性があります。だからではなく、Turbolinksは、それがページのコンテンツを変更するイベントを発生させます:代わりに

$(document).ready(function(){ 

使用

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

それは働いたようでした、ありがとう! – edhog

関連する問題