#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