2015-04-07 4 views
0

Вопрос: У меня есть вид simple_form, что пользователи могут выбрать дату leave_start и leave_end. Я хочу получить даты между этим диапазоном, а примером будет leave_start = 4/1/15 leave_end = 4/5/15, а сроки между ними будут (4/1/15, 4/2/15, 4/3/15, 4/4/15, 4/5/15). У меня есть функция щелчка, но когда я нажимаю текстовое поле gdates, ничего не появляется, и я хочу, чтобы даты отображались в этом текстовом поле (4/1/15, 4/2/15, 4/3/15, 4/4/15, 4/5/15). Любая помощь была бы весьма признательна.Не могу понять, почему мой javascript ничего не делает

Это мой app.js

// JavaScript include manifest for the non-angular pages 
// 
//= require jquery 
//= require jquery_ujs 
//= require jquery.ui.all 
//= require best_in_place 
//= require bootstrap 
//= require jquery.ui.datepicker 
//= require entry 



$(document).ready(function() { 


    $('#gdates').click(function() { 

     var start = $('#leave_start').datepicker("getDate"), 
      end = $('#leave_end').datepicker("getDate"), 
      currentDate = new Date(start), 
      between = [] 
     ; 

     while (currentDate <= end) { 
      between.push(new Date(currentDate)); 
      currentDate.setDate(currentDate.getDate() + 1); 
     } 
     $('#gdate').val(); 
    }); 
    }); 

Это мой entry.js, что имеет DatePicker

jQuery -> 

    $('#leave_start').datepicker({minDate: 0, beforeShowDay: $.datepicker.noWeekends }); 


    $('#leave_end').datepicker({minDate: 0, beforeShowDay: $.datepicker.noWeekends }); 

Мой взгляд

=simple_form_for @entry, :url => url_for(:controller => 'entry', :action => 'create'), :method => :post do |f| 

    %table.table.table-bordered.table-striped{:style => 'table-layout:fixed; width:100% !important;'} 
     %th.lt Leave Start: 
     %td.lt= f.text_field :leave_start, :label => false, :id => 'leave_start', :input_html => {:value => ''} 
     %td.lt= f.error :leave_start, :class => 'er' 

    %table.table.table-bordered.table-striped{:style => 'table-layout:fixed; width:100% !important;'} 
     %th.lt Leave End: 
     %td.lt= f.text_field :leave_end, :label => false, :id => 'leave_end', :input_html => {:value => ''} 
     %td.lt= f.error :leave_end, :class => 'er' 


    %table.table.table-bordered.table-striped{:style => 'table-layout:fixed; width:100% !important;'} 
     %th.lt Dates: 
     %td.lt= f.text_field :all_dates, :label => false, :id => 'gdates', :input_html => {:value => ''} 

    %table.table.table-bordered.table-striped{:style => 'table-layout:fixed; width:100% !important;'} 
    = f.button :submit, "Submit", :class => 'btn btn-primary', :style => 'margin-left:50px;' 

Extra в моей модели входа у меня есть метод, чтобы получить количество дней между leave_start и leave_end ... Что я не думаю, что это вызывает проблему.

запись модель

def range_days 
    self.range_days = only_weekdays(leave_start.to_date..(leave_end.to_date)).to_i 
    end 

    private 

    #works with l_s to l_e to calc amount of days minus weekends... 
    def only_weekdays(range) 
    range.select { |d| (1..5).include?(d.wday) }.size 
    end 
end 
+0

вы можете проверить мо ment.js для упрощения обработки даты, setDate и get Date будут работать для перемещения дней на один, если вы работаете с экземплярами дат. Вероятно, ваша проблема связана с выбором даты. –

+0

application.js: @NikosM. – Snowman88

ответ

0

добавления комментариев как ответ:

, что выход вы получаете? это неверно currentDate.setDate(currentDate.getDate() + 1);, так как он, вероятно, увеличивает дату на одну секунду, нет тривиальных для получения промежуточных дат, вам нужно увеличивать их на один день, а также проверять на февраль, конец месяца, високосный год и т. д.

также вы ничего не добавляют к $('#gdate').val();, попробуйте $('#gdate').val(JSON.stringify(between));

UPDATE:

Если вы хотите, чтобы отобразить даты в текстовом поле в другом формате, не STH так:

var formated_dates = between.reduce(function(dates, date){ 
    dates.push(date.toString()); 
    return dates; 
}, []); 
$('#gdate').val(formated_dates.join("\n")); 
+0

var b = new Date(); b.setDate (b.getDate() + 1) перемещает b на следующий день, по крайней мере в chrome –

+0

Ничего не отображается в текстовом поле @Nikos M. – Snowman88

+0

@ Snowman88 вы получаете ошибки javascript (открывайте хром-консоль проверить)? –

Смежные вопросы