javascript - 如何在 Javascript/PHP 中选择月份和年份后立即填充月份的天数?

标签 javascript php jquery html

<分区>

这是代码:

        <label for="birthday">Birthday Year</label>
        <select id="byear" name="byear" required>
            <option value="">Select Year</option>
            <?
            $fy = date("Y")-19;
            for ($i = $fy; $i >= date("Y")-80; $i--) {
                echo '<option value="'.$i.'">'.$i.'</option>';
            }
            ?>
        </select>

        <label for="birthday">Month</label>
        <select id="bmonth" name="bmonth" required>
            <option value="">Select Month</option>
            <option value="jan">January</option>
            <option value="feb">February</option>
            <option value="mar">March</option>
            <option value="apr">April</option>
            <option value="may">May</option>
            <option value="jun">June</option>
            <option value="jul">July</option>
            <option value="aug">August</option>
            <option value="sep">September</option>
            <option value="oct">October</option>
            <option value="nov">Novermber</option>
            <option value="dec">December</option>
        </select>


        <label for="birthday">Day</label>
        <select id="bday" name="bday" required disabled>
            <option value="">Select Day</option>
            <?
            $fm = cal_days_in_month(CAL_GREGORIAN,month??,year??);
            for ($i = 1; $i <= $fm; $i++) {
                echo '<option value="'.$i.'">'.$i.'</option>';
            }
            ?>
        </select>

两个问题:

  • 如何仅在年份和月份出现时才启用日期列表框 被选中,如果其中之一被重置为空则被禁用?
  • 函数 cal_days_in_month() 怎么能直接接受在前面的列表框中选择的年份和月份?

最佳答案

您应该使用客户端 javascript 填充 bday 选择选项,就像我在下面为您制作的代码片段中一样。您所要做的就是将生成年份选项的 php 放回下面的示例中(我不能将服务器端的 PHP 放在下面的示例中)。享受吧!

请注意:此代码甚至会自动计算每个月的天数! (2 月有 28 个,除了闰年,则有 29 个!)。以 1992 年 2 月为例(那是闰年)。

function daysInMonth(month, year) {
  return new Date(year, month, 0).getDate();
}

$('#byear, #bmonth').change(function() {

  if ($('#byear').val().length > 0 && $('#bmonth').val().length > 0) {
    $('#bday').prop('disabled', false);
    $('#bday').find('option').remove();

    var daysInSelectedMonth = daysInMonth($('#bmonth').val(), $('#byear').val());

    for (var i = 1; i <= daysInSelectedMonth; i++) {
      $('#bday').append($("<option></option>").attr("value", i).text(i));
    }

  } else {
    $('#bday').prop('disabled', true);
  }

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label for="birthday">Birthday Year</label>
<select id="byear" name="byear" required>
  <option value="">Select Year</option>
  <option value="1994">1994</option>
  <option value="1993">1993</option>
  <option value="1992">1992</option>
  <option value="1991">1991</option>
</select><br><br>

<label for="birthday">Month</label>
<select id="bmonth" name="bmonth" required>
  <option value="">Select Month</option>
  <option value="1">January</option>
  <option value="2">February</option>
  <option value="3">March</option>
  <option value="4">April</option>
  <option value="5">May</option>
  <option value="6">June</option>
  <option value="7">July</option>
  <option value="8">August</option>
  <option value="9">September</option>
  <option value="10">October</option>
  <option value="11">Novermber</option>
  <option value="12">December</option>
</select><br><br>

<label for="birthday">Day</label>
<select id="bday" name="bday" required disabled>
  <option value="">Select Day</option>
</select>

关于javascript - 如何在 Javascript/PHP 中选择月份和年份后立即填充月份的天数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35116867/

相关文章:

javascript - 从 div 中删除所有媒体查询 css 规则

javascript - 获取 React material-UI Autocomplete 中的值

javascript - 如何找出 Javascript 数组中元素的数量?

javascript - 删除javascript中每个数组的第一个元素

php - 如何扩展 Magento API catalog_product.list 以包含更多产品信息 XML-RPC

php - 为什么不能将搜索功能与选择功能一起使用?使用 PHP、jQuery、Ajax

javascript - 如何更改我的网格

javascript - 如何将个人资料图片设置为名字和姓氏的首字母?

php - 带有 session 的网页,用于对 Android 应用程序进行身份验证

javascript - Bootstrap Modal 的 setTimeout 在超时后不显示