Я создаю сайт Simple deal. Когда в цикле index.html.erb работает только первый цикл. Но он работает на show.html.erb
<h1>Listing Deal</h1><% @projs.each do |proj| %>
<%= proj.title %><br />
<% if Time.now < proj.end_date %>
<h3>Days Left:</h3> <div id="countdown" style="width:40%"> <%= distance_of_time_in_words(Time.now, proj.end_date) %> </div>
<% else %>
<h3> The Project period has passed! </h3>
<% end %>
<script type="text/javascript">
$(document).ready(function(){
$('#countdown').countdown({
"until" : new Date(<%= date_for_jquery_countdown(proj.end_date) %>)
});
})
</script><% end %>
Projs_helper.rb **
def date_for_jquery_countdown(date)
year = date.strftime('%Y')
month = date.strftime('%-m')
day = date.strftime('%d')
"#{year}, #{month}-1, #{day}"
end
application.js
//= require jquery.plugin
//= require jquery.countdown
Мой браузер display index.html.erb показывает только первый, но другие не отображают обратный отсчет
Вы не можете иметь один и тот же идентификатор для нескольких элементов в HTML.
Вы создаете множество элементов с одним и тем же идентификатором, и будет работать только первый.
Вместо этого используйте класс CSS:
<div class="countdown"
...
$('.countdown').countdown(
РЕДАКТИРОВАТЬ:
Однако для каждой итерации вам нужно установить одно другое значение, поэтому я бы использовал идентификатор, но с помощью счетчика, например:
<!-- declare a counter here -->
<h1>Listing Deal</h1><% @projs.each do |proj| %>
<%= proj.title %><br />
<% if Time.now < proj.end_date %>
<h3>Days Left:</h3> <div id="countdown_<$= counter %>" style="width:40%"> <%= distance_of_time_in_words(Time.now, proj.end_date) %> </div>
<% else %>
<h3> The Project period has passed! </h3>
<% end %>
<script type="text/javascript">
$(document).ready(function(){
$('#countdown_<$= counter %>').countdown({
"until" : new Date(<%= date_for_jquery_countdown(proj.end_date) %>)
});
})
</script>
<!-- assign your counter = counter + 1 here -->
<% end %>
Извините, но я не знаю рубина, поэтому я сделал комментарии, которые вам нужно будет изменить!
Не очень хорошая практика иметь более одного элемента на странице с одним и тем же идентификатором html. В вашем случае все элементы обратного отсчета имеют одинаковый идентификатор (#countdown). Измените его на класс (и, вероятно, переместите ширину: 40% в файл css при обратном отсчете)
<% if Time.now < proj.end_date %>
<h3>Days Left:</h3> <div class="countdown" style="width:40%"> <%= distance_of_time_in_words(Time.now, proj.end_date) %> </div>
<% else %>
<h3> The Project period has passed! </h3>
<% end %>
И в вашем Javascript используйте класс
<script type="text/javascript">
$(document).ready(function(){
$('.countdown').countdown({
"until" : new Date($(this).text())
});
})
</script>
Также переместите блок javascript из цикла