【问题标题】:Crazy behavior in jquery date-pickerjquery 日期选择器中的疯狂行为
【发布时间】:2013-02-27 17:10:24
【问题描述】:

我的 RoR 应用程序中有 2 个来自 jquery1.8.1.min.js 的 jquery 日期选择器实例。

我有这个功能:

    $(".date-picker:not('#policy_starts_on')").datepicker();
    $('#policy_starts_on.date-picker').datepicker({
        startDate: '0',
        endDate: '+90d'
    });

与此输入相关:

<input class="required  date-picker input-small align-center" id="policy_starts_on" name="policy[starts_on]" size="30" type="text" value="02/27/2013">

那我就有这个功能了:

    $(".date-picker:not('#act_event_ends_on')").datepicker();
    $('#act_event_ends_on.date-picker').datepicker({
        startDate: '0',
        endDate: '+180d'
    });

与此输入相关:

<input class="required date-picker input-small align-center" id="act_event_ends_on" name="act_event[ends_on]" size="30" type="text">

两个输入都是由 ruby​​ 表单助手生成的:

这是第一个表单助手:

= f.input :starts_on, :label => 'Policy Start Date', :required => true

这是第二个表单助手:

= f.input :ends_on, :label => 'Event End Date', :required => true 

问题:为什么第一个输入被正确限制(IE你不能选择过去的一天,它只会让你进入未来90天)而第二个输入完全没有被限制?


【问题讨论】:

  • 你为什么要为他们俩打两次.datepicker()?
  • 另一个“复制和粘贴失败”问题。

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


【解决方案1】:

这一行:

$(".date-picker:not('#policy_starts_on')").datepicker();

初始化第二个输入(id="act_event_ends_on" 的那个),因为它具有date-picker 类并且没有policy_starts_on id。

因此,这个元素已经被初始化了,下面的代码将不再为你做任何事情:

$('#act_event_ends_on.date-picker').datepicker({
    startDate: '0',
    endDate: '+180d'
});

解决方案:

我的建议是为异常提供特殊的类名(即“date-picker-special”):

<input class="required  date-picker date-picker-special input-small align-center" id="policy_starts_on" name="policy[starts_on]" size="30" type="text" value="02/27/2013">

<input class="required date-picker date-picker-special input-small align-center" id="act_event_ends_on" name="act_event[ends_on]" size="30" type="text">

然后您可以执行以下操作:

$(".date-picker:not('.date-picker-special')").datepicker();
$('#policy_starts_on.date-picker').datepicker({
    startDate: '0',
    endDate: '+90d'
});
$('#act_event_ends_on.date-picker').datepicker({
    startDate: '0',
    endDate: '+180d'
});

【讨论】:

  • 添加了特殊课程,效果很好,谢谢。是的,我没有写原件,只是继承了它,没有解释$(".date-picker:not(''))" 行在做什么。不过你说的有道理。现在我知道它为未来做了什么。再次感谢。
【解决方案2】:

只是为了实验,如果您以相反的顺序声明这些日期选择器设置,是否会发生相反的行为?如果另一个坏了,那么你可以断定 datepicker 有一个错误(这不太可能)。否则,您需要查看自己的代码。

另外,请注意,您在每个块之前都添加了如下内容:

$(".date-picker:not('#policy_starts_on')").datepicker();

意思是选择除一个特定日期之外的所有日期选择器。

所以下次你设置一个时,它已经被说出来了。尝试删除那些单线,你会得到:

$('#policy_starts_on.date-picker').datepicker({
    startDate: '0',
    endDate: '+90d'
});

$('#act_event_ends_on.date-picker').datepicker({
    startDate: '0',
    endDate: '+180d'
});

【讨论】:

  • +1 获取相同的信息,但其他人提供了使其正常工作的解决方案。感谢您抽出宝贵时间查看。
猜你喜欢
  • 1970-01-01
  • 2010-09-07
  • 2014-03-05
  • 2011-08-21
  • 1970-01-01
  • 2020-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多