jquery日期选择器中的疯狂行为

时间:2013-02-27 17:10:24

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

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

我有这个功能:

    $(".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天),而第二个输入是不是受到限制?


2 个答案:

答案 0 :(得分:2)

这一行:

$(".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'
});

答案 1 :(得分:1)

仅仅为了实验,如果你以相反的顺序声明那些日期选择器设置,会发生相反的行为吗?如果相反的一个中断,那么你可以得出结论,datepicker有一个bug(这是不可能的)。否则,你需要查看自己的代码。

另外,请注意您在每个块之前都有这样的内容:

$(".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'
});