0

我在 cakephp 中使用了 formhelper

   echo $this->Form->input('birth_dt', array( 'label' => 'Date of birth'));

我发现二月份的“31”日......这是一个错误吗?因为没有 2 月 31 日这样的事情

4

3 回答 3

1

就像 JohnP 所说,它不会根据月份值更改下拉菜单。我的意思是 - 你可以FormHelper在你的项目中使用没有任何 Javascript 的 - 那么它会怎么做呢?

不过,这将是一个相当酷的功能。使用 jQuery 或其他工具,您可以收听月份和年份下拉菜单,并根据月/年值更改日下拉菜单的选项。cal_days_in_month()。做起来并不难,我想它可以作为 FormHelper 的附加功能包含在 Cake 2.0 中。如在,如果你有JsHelper- 你可以使用它。

好吧,只是因为我有点无聊,我写了这段jQuery代码:

<script type="text/javascript">
$().ready(function()
  {
  $('#ModelFieldMonth, #ModelFieldYear').change(function()
    {
    var day = $('#ModelFieldDay').val();
    var month = $('#ModelFieldMonth').val();
    var year = $('#ModelFieldYear').val();

    var days_in_month = new Array();
    days_in_month['01'] = 31; days_in_month['02'] = 28; days_in_month['03'] = 31; days_in_month['04'] = 30; days_in_month['05'] = 31; days_in_month['06'] = 30;
    days_in_month['07'] = 31; days_in_month['08'] = 31; days_in_month['09'] = 30; days_in_month['10'] = 31; days_in_month['11'] = 30; days_in_month['12'] = 31;
    if (year % 4 == 0) { days_in_month['02'] = 29; } // if leap year

    $('#ModelFieldDay').find('option').remove();
    var i = 0;
    for (i = 1; i <= days_in_month[month]; i++)
      {
      $('#ModelFieldDay').append('<option value="'+i+'">'+i+'</option>')
      }
    $('#ModelFieldDay').val(day);
    });
  });
</script>
于 2011-05-30T09:25:54.673 回答
0

你说的是下拉菜单吧?好吧,也没有 4 月 31 日这样的事情 :)

下拉列表仅生成给定范围内所有适用日期的列表。它不会根据所选月份更改值。所以不,这不是一个错误。

于 2011-05-30T09:16:57.940 回答
0

就像其他人所说的那样,下拉列表是静态的,而不是特定于月份的。无论如何,您都应该在使用日期之前对其进行验证,因此您只需添加一个验证规则来通知用户他们是否选择了无效的组合。

于 2011-05-30T12:01:45.623 回答