【问题标题】:Can't figure out why my javascript isn't doing anything无法弄清楚为什么我的 javascript 没有做任何事情
【发布时间】:2015-04-07 18:04:46
【问题描述】:

问题是我有 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)任何帮助都会很大赞赏。

这是我的 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,它有日期选择器

 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;'

在我的入门模型中,我有一种方法可以获取 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

【问题讨论】:

  • 您可能需要检查 moment.js 以便更轻松地进行日期操作,如果您使用日期实例,setDate 和 get Date 将用于将日期向上移动。您的问题可能与日期选择器有关。
  • 申请.js:@NikosM。

标签: javascript jquery ruby-on-rails ruby ruby-on-rails-4


【解决方案1】:

添加 cmets 作为答案:

你得到什么输出?这是不正确的currentDate.setDate(currentDate.getDate() + 1);,因为它可能会将日期增加一秒,获取中间日期并非易事,您需要增加一天并检查二月、月末、闰年等。

你也不给$('#gdate').val();添加任何东西,试试$('#gdate').val(JSON.stringify(between));

更新:

如果你想以另一种格式显示文本框中的日期,请这样做:

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

【讨论】:

  • var b = new Date(); b.setDate(b.getDate()+1) 将 b 移到第二天,至少在 chrome 中
  • @Snowman88 你是否收到任何 javascript 错误(打开 chrome 控制台进行检查)?
  • @Snowman88 在我的控制台中使用测试示例作为代码的一部分,它工作正常,可能是日期选择器有问题,或者该字段被隐藏或禁用或其他什么,应该将其余代码发布为好
  • 我用一些额外的东西更新了我的问题......我无法发布屏幕截图,因为我没有足够的信誉。 :(@NikosM.
  • @Snowman88,也许您应该只使用有问题的代码发布一个实时链接或 jsfiddle 链接,这将非常有帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多