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

如何在Javascript/PHP中选择月份和年份后立即填充月份天数?,javascript,php,jquery,html,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;

代码如下:

        <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 select选项,就像下面我为您编写的代码片段一样。您所要做的就是将生成年份选项的php放回下面的示例中(我不能将服务器端php放在下面的示例中)。享受吧

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

功能日月(月,年){
返回新日期(年、月、0)。getDate();
}
$('byear,'bmonth').change(function(){
如果($('#byear').val().length>0&$('#bmonth').val().length>0){
$('#bday').prop('disabled',false);
$('#bday')。查找('option')。删除();
var daysinsselectedmonth=daysinsmonth($('bmmonth').val(),$('byear').val());

对于(var i=1;i您在这里使用PHP有什么原因吗?您希望通过纯JS/Jquery解决方案轻松实现

jquery插件可能已经完成了您想要的一切:

但是,如果您真的想自己做,我会将HTML改为(去掉所有PHP):

生日年
选择年份
/*您可以在这里硬编码年份,也可以使用js函数生成年份*/
月
选择月份
一月
二月
前进
四月
也许
六月
七月
八月
九月
十月
十一月
十二月
白天
/*把这个空着*/
那么您只需要一个JS函数:

function generateDays(sel) {
    var year = document.getElementById('byear').value;
    var month = document.getElementById('bmonth').value


    if(year == "" || month == "") {
       //disable your bday input or do whatever you want
       document.getElementById('bday').disabled = true;
    } else {

        var days = new Date(year, month, 0).getDate();
        //enable bday in case it was previously disabled
        document.getElementById('bday').disabled = false;

        //Clear the bday select element first
        document.getElementById('bday').innerHTML = "";

        for (i = 1; i <= days; i++) {
            document.getElementById('bday').innerHTML += "<option value='"+i+"'>"+i+"</option>";
        }

    }

}
函数生成日期(sel){
var year=document.getElementById('byear').value;
var month=document.getElementById('bmmonth')。值
如果(年=“”|月=“”){
//禁用您的bday输入或执行任何您想要的操作
document.getElementById('bday').disabled=true;
}否则{
var days=新日期(年、月、0).getDate();
//如果以前禁用了bday,则启用bday
document.getElementById('bday')。disabled=false;
//首先清除bday选择元素
document.getElementById('bday').innerHTML=“”;

对于(i=1;我有一些相对简单的JavaScript选择事件处理。有很多预制库,你可以使用,你有没有尝试过?如果没有,为什么没有?这需要在JavaScript中完成,但你没有显示任何JavaScript。请显示所做的尝试,这样你就不会期望别人做你r为您编写代码更好的方法是添加日历来选择日期..jquery ui calendar是一个更好的方法..我在JSIDdle上尝试了它,但对于一些读者来说,在当天listbox总是被禁用的。很抱歉,在代码中输入了一些错误。下面是JSIDdle链接:。记住在JSIDdle中将js设置为无换行符
function generateDays(sel) {
    var year = document.getElementById('byear').value;
    var month = document.getElementById('bmonth').value


    if(year == "" || month == "") {
       //disable your bday input or do whatever you want
       document.getElementById('bday').disabled = true;
    } else {

        var days = new Date(year, month, 0).getDate();
        //enable bday in case it was previously disabled
        document.getElementById('bday').disabled = false;

        //Clear the bday select element first
        document.getElementById('bday').innerHTML = "";

        for (i = 1; i <= days; i++) {
            document.getElementById('bday').innerHTML += "<option value='"+i+"'>"+i+"</option>";
        }

    }

}