form_for флажки, работающие только на первой вкладке jquery

#ruby-on-rails #forms #loops #checkbox #jquery-tabs

#ruby-on-rails #формы #циклы #флажок #jquery-tabs

Вопрос:

Я создаю form_for , который в основном позволяет пользователю отмечать, когда он завершил видео. Я вкладываю эту форму в вкладки jQuery и хочу иметь по одному флажку на каждой вкладке, и пока я это понял. Однако функциональность не работает: только флажок на первой вкладке фактически изменяет значение при его отправке. Есть идеи, как это исправить?

 <% for i in 1..@statement %>
<div id="htab-current-<%= i %>">
  <%= form_for @user.workouts.where(week_num:  @week).where(video_num_in_week: i).first.assignedworkouts.first, remote:true ,:html=>{:id=>'completed_form'} do |f| %>
    <%= f.check_box :completed, :onclick => "$('#completed_form').submit()" %>      
  <% end %>

  <div class='videowrapper2'>
    <div id="myElement<%= i %>">Loading the player ...</div>
    <script type="text/javascript">
      jwplayer("myElement<%= i %>").setup({
        skin: 'five',
        width: "100%",
        aspectratio: "4:3",
        listbar: {
          position: 'bottom',               
        },
        playlist: '<%=asset_path(@user.workouts.where(week_num:  @week).where(video_num_in_week: i).first.playlist_file ) %>'
      });
    </script>
  </div>
</div>
  

РЕДАКТИРОВАТЬ: я попробовал грубое форсирование, и на самом деле это была проблема с тем, что идентификатор в форме был одинаковым. Однако, когда я изменил его на динамически генерируемый, даже если идентификаторы в форме и вызове jQuery совпадают, они, похоже, не работают.

 <% for i in 1..@statement %>
<div id="htab-current-<%= i %>">
  <%= form_for @user.workouts.where(week_num:  @week).where(video_num_in_week: i).first.assignedworkouts.first, remote:true ,:html=>{:id=>"#{i}completed_form'"} do |f| %>
    <%= f.check_box :completed, :onclick => "$('#{i}completed_form').submit()" %>

    <% end %>
  <div class='videowrapper2'>
    <div id="myElement<%= i %>">Loading the player ...</div>
    <script type="text/javascript">
      jwplayer("myElement<%= i %>").setup({
        skin: 'five',
        width: "100%",
        aspectratio: "4:3",
        listbar: {
          position: 'bottom',               
        },
        playlist: '<%=asset_path(@user.workouts.where(week_num:  @week).where(video_num_in_week: i).first.playlist_file ) %>'
      });
    </script>
  </div>
</div>
  

Комментарии:

1. Это будет генерировать одну форму для каждой тренировки, и вы можете отправлять только одну форму за раз. Попробуйте другой подход, где все это в одной форме.

Ответ №1:

Попробуйте с:

 <% for i in 1..@statement %>
<div id="htab-current-<%= i %>">
  <%= form_for @user.workouts.where(week_num:  @week).where(video_num_in_week: i).first.assignedworkouts.first, remote:true ,:html=>{:id=>'completed_form'} do |f| %>
    <%= f.check_box :completed, :onclick => "$('#completed_form').submit()" %>

  <div class="videowrapper2">
    <div id="myElement<%= i %>">Loading the player ...</div>
    <script type="text/javascript">
      jwplayer("myElement<%= i %>").setup({
        skin: 'five',
        width: "100%",
        aspectratio: "4:3",
        listbar: {
          position: 'bottom',               
        },
        playlist: '<%=asset_path(@user.workouts.where(week_num:  @week).where(video_num_in_week: i).first.playlist_file ) %>'
      });
    </script>
  </div>
</div>

<% end %>
  

Комментарии:

1. Это указывает на то, что отсутствует оператор end. Вероятно, поскольку вы удалили тот, который вызывает форму. У меня есть двойной конец, один для закрытия цикла, а другой для формы, но спасибо за ваш ответ. Я думаю, проблема на самом деле в том, что все формы генерируются с одним и тем же идентификатором html