Ruby on Rails:jQuery datepicker - 验证之间的日期

时间:2012-10-19 09:04:34

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

我有一个应用程序,允许用户创建新项目,并在以后搜索它们。创建项目时他们拥有的选项之一就是为他们提供开始和结束日期。目前,所有代码都可以正常用于创建和搜索日期,但我现在想要限制用户可以输入的日期。

当用户尝试输入开始日期之前的结束日期时,我需要标记错误。用户创建项目时更是如此。这是我到目前为止的代码=>

的application.js

//= require jquery
//= require jquery_ujs
//= require jquery-ui
//= require jquery.ui.all
//= require_tree .

$(function() {
  $("#project_start_date").datepicker({dateFormat: 'dd-mm-yy'});
});
$(function() {
  $("#project_end_date").datepicker({dateFormat: 'dd-mm-yy'});
});
jQuery(function(){
jQuery('#start_date_A').datepicker({dateFormat: "dd-mm-yy"});
});
jQuery(function(){

jQuery('#start_date_B').datepicker({dateFormat: "dd-mm-yy"});
});

新视图:

<div class="start_date" STYLE="text-align: left;">
    <b>Start Date:</b>
    <%= f.text_field :start_date, :class => 'datepicker', :style => 'width: 80px;' %>
  </div> 


<div class="end_date" STYLE="text-align: left;">
    <b>End Date:</b>
    <%= f.text_field :end_date, :class => 'datepicker', :style => 'width: 80px;' %>
  </div> 

搜索视图:

Start dates between

<%=  text_field_tag :start_date_A, params[:start_date_A], :style => 'width: 80px;' %>


-

<%=  text_field_tag :start_date_B, params[:start_date_B], :style => 'width: 80px;' %></br>

我尝试在线跟踪示例,以便在application.js文件中执行此操作:

$(function() {
$("#project_start_date,#project_end_date").datepicker({dateFormat: 'dd-mm-yy'});
});

jQuery(function(){
jQuery('#start_date_A,#start_date_B').datepicker({dateFormat: "dd-mm-yy"});
});

但是脚本没有运行。我是rails和javascript的新手,所以任何帮助都是值得赞赏的。提前谢谢。

更新: 不知道为什么我的问题被投票结束了。这很简单:

当用户尝试输入开始日期之前的结束日期时,我需要标记错误。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

当我使用我的应用程序(需要类似的东西)时,我没有找到合适的解决方案,但是我只是使用datepicker来指定用户可以选择日期的范围:

$( "#datepicker" ).datepicker({ minDate: -20, maxDate: "+1M +10D" });

这允许用户仅选择minDate和maxDate之间的日期(其余日期显示为灰色)。看看http://jqueryui.com/datepicker/#min-max。希望它有帮助

答案 1 :(得分:0)

我把我放在验证中

validate :validate_end_date_after_start_date

def validate_end_date_before_start_date
  if project_end_date && project_start_date
    errors.add(:project_end_date, "Project must begin before it ends") if project_end_date < project_start_date
  end
end

并且不用担心立即进行Jquery验证