2017-12-12 2 views
0

"Daily"ラジオボタンがチェックされているとき、私のレールフォームのラジオボタンのリストを動的に表示/非表示する必要があります。これはほとんど機能しますが、「毎週」(「毎日」のチェックを外す)をチェックすると、リストは非表示になります。 JavaScriptが新しくて、私が逃しているものを理解しようとしています。 resetradio(本) - ここでチェックボックスをオフにすると、レールフォームのラジオボタンが非表示になりません。

<%= form_for list_chores_path(@list.id) do |f| %> 
<div class="field"> 
    <%= f.radio_button :frequency, 'Daily', onClick: "resetradio(this)" %> Daily<br> 
    <div class="buttons" style="display:none;"> 
     <%= f.radio_button :time_of_day, 'Morning', onClick:"setradio()" %> Morning<br> 
    <%= f.radio_button :time_of_day, 'Evening', onClick:"setradio()" %> Evening<br> 
    <%= f.radio_button :time_of_day, 'Any Time', onClick:"setradio()" %> Any Time<br> 
    </div> 
    <%= f.radio_button :frequency, 'Weekly' %> Weekly<br> 
</div> 


<script type="text/javascript"> 
    function resetradio (radio) { 
    var buttons = document.querySelector('.buttons'); 
    var radios = document.getElementsByName('/lists/<%= @list.id %>/chores[time_of_day]'); 
    radios[0].checked = false; 
    if (radio.checked == true) { 
     buttons.style.display = 'block'; 
      } 
    else { 
     buttons.style.display = 'none'; 
      } 
    } 

    function setradio() { 
    var radio = document.getElementsByName('/lists/<%= @list.id %>/chores[frequency]')[0]; 
     if (radio.checked == false) { 
      radio.checked = true;  
      } 
     } 
    </script> 

あなたは毎週クリックすると、あなたはjavascript関数を呼び出していないのでそれはあるHTML

<div class="field"> 
    <input onclick="resetradio(this)" type="radio" value="Daily" name="/lists/4/chores[frequency]" id="_lists_4_chores_frequency_daily"> Daily<br> 
    <div class="buttons" style="display: block;"> 
     <input onclick="setradio()" type="radio" value="Morning" name="/lists/4/chores[time_of_day]" id="_lists_4_chores_time_of_day_morning"> Morning<br> 
     <input onclick="setradio()" type="radio" value="Evening" name="/lists/4/chores[time_of_day]" id="_lists_4_chores_time_of_day_evening"> Evening<br> 
     <input onclick="setradio()" type="radio" value="Any Time" name="/lists/4/chores[time_of_day]" id="_lists_4_chores_time_of_day_any_time"> Any Time<br> 
    </div> 
    <input type="radio" value="Weekly" name="/lists/4/chores[frequency]" id="_lists_4_chores_frequency_weekly"> Weekly<br> 

+0

'document.getElementsById'のようなものはありません。なぜなら、' id'は一意であると考えられるからです。 *常に*ブラウザコンソールでエラーを最初に確認してください。 –

+0

チップをありがとう!私はそれを "document.getElementsByName"に変更し、もはやエラーを取得しません。残念ながら、私はまだ "Daily"がチェックされていないときにtime_of_dayラジオボタンが隠れていないのと同じ動作をしています。 – Mary

+0

Qを編集して、rorソースではなく実際のHTML出力を表示できますか? –

答えて

0

です。 週刊にOnclickイベントを追加することにより、

<%= f.radio_button :frequency, 'Weekly', onClick: "resetradio(this)" %> Weekly<br> 
+0

これで、time_of_dayラジオボタンが正常にクリアされました。私は、 "this"を渡す代わりにresetradio()関数でラジオ変数を作成し、両方の変更がうまくいった。 – Mary

0

私はそれを修正する動作するはずです後(おかげでシャニ!)、その後、代わりに「この」それに渡すのresetradio()関数での無線変数を作成します。

<script type="text/javascript"> 
    function resetradio() { 
     var radio = document.getElementsByName('/lists/<%= @list.id %>/chores[frequency]')[0]; 
     var buttons = document.querySelector('.buttons'); 
     var radios = document.getElementsByName('/lists/<%= @list.id %>/chores[time_of_day]'); 
     radios[0].checked = false; 
     if (radio.checked == true) { 
     buttons.style.display = 'block'; 
    } 
    else { 
     buttons.style.display = 'none'; 
    } 
} 



function setradio() { 
    var radio = document.getElementsByName('/lists/<%= @list.id %>/chores[frequency]')[0]; 
    if (radio.checked == false) { 
     radio.checked = true; 

     } 
    } 
</script> 
関連する問題