0

Cakephpでフォームヘルパーを使用しました

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

2 月の「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

他の人が言ったように、ドロップダウンは静的であり、月固有ではありません. いずれにせよ、日付を使用する前に検証する必要があるため、検証ルールを追加して、ユーザーが無効な組み合わせを選択した場合に通知することができます。

于 2011-05-30T12:01:45.623 に答える
0

ドロップダウンについて話しているのですか?まあ、4月31日というものもありません:)

ドロップダウンは、特定の範囲に適用可能なすべての日付のリストを生成するだけです。選択した月によって値が変わることはありません。いいえ、それはバグではありません。

于 2011-05-30T09:16:57.940 に答える