我们使用jQuery .hide()来隐藏选择输入中的选项 – 一个月内不到31天.它适用于Google Chrome和FireFox,但在Internet Explorer,Opera和Safari中无效.以下是我们使用的
JavaScript代码:
$(function() { // Show and hide days according to the selected year and month. function show_and_hide_days(fp_form) { var select_year= $(fp_form).find("select.value_year"); var select_month= $(fp_form).find("select.value_month"); var select_day= $(fp_form).find("select.value_day"); var selected_year= parseInt($(select_year).val()); var selected_month= parseInt($(select_month).val()); var selected_day= parseInt($(select_day).val()); var days_in_month= new Date(selected_year,selected_month,0).getDate(); if ((days_in_month >= 28)) { // If selected day is bigger than the number of days in the selected month,reduce it to the maximal day in this month. if (selected_day > days_in_month) { $(select_day).val(days_in_month); } // Show all the days in this month and hide days which are not in this month. $(select_day).find("option").each(function() { var day= parseInt($(this).val()); if (day <= days_in_month) { $(this).show(); } else { $(this).hide(); } }); } } // Show and hide all days in this page. function show_and_hide_all_days() { $("select.value_day").each(function() { var form= $(this).closest("form"); // Show and hide days according to the selected year and month. show_and_hide_days(form); }); } // Show and hide all days in this page. show_and_hide_all_days(); $("select.value_year,select.value_month").live("change",function() { var form= $(this).closest("form"); // Show and hide days according to the selected year and month. show_and_hide_days(form); return false; }); });
这是HTML代码:
<select class="value_year"> <option value="2000">2000</option> <option value="2001">2001</option> <option value="2002">2002</option> <option value="2003">2003</option> <option value="2004">2004</option> <option value="2005">2005</option> <option value="2006">2006</option> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2009</option> <option value="2010">2010</option> <option value="2011">2011</option> <option value="2012" selected="selected">2012</option> <option value="2013">2013</option> </select> / <select class="value_month"> <option value="1">01</option> <option value="2">02</option> <option value="3">03</option> <option value="4">04</option> <option value="5">05</option> <option value="6">06</option> <option value="7">07</option> <option value="8">08</option> <option value="9">09</option> <option value="10">10</option> <option value="11">11</option> <option value="12" selected="selected">12</option> </select> / <select class="value_day"> <option value="1">01</option> <option value="2">02</option> <option value="3">03</option> <option value="4">04</option> <option value="5">05</option> <option value="6">06</option> <option value="7">07</option> <option value="8">08</option> <option value="9">09</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18" selected="selected">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> <option value="24">24</option> <option value="25">25</option> <option value="26">26</option> <option value="27">27</option> <option value="28">28</option> <option value="29">29</option> <option value="30">30</option> <option value="31">31</option> </select>
我们正在使用jQuery v1.8.3(我升级到这个版本来测试它是否修复了问题,但是没有).
谢谢,
URI.
解决方法
这是一个浏览器问题,您无法在某些浏览器中隐藏选项,因为$(‘.selector’).hide();类似于$(‘.selector’).css(‘display’,’none’);一些浏览器无法隐藏它
你需要使用$(‘.selector’).remove();和$(‘.selector’).append();
更改代码
if ((days_in_month >= 28)) { // If selected day is bigger than the number of days in the selected month,reduce it to the maximal day in this month. if (selected_day > days_in_month) { $(select_day).val(days_in_month); } // Show all the days in this month and hide days which are not in this month. $(select_day).find("option").each(function() { var day= parseInt($(this).val()); if (day <= days_in_month) { $(this).show(); } else { $(this).hide(); } }); }
至
// Remove days 29 - 31 $(select_day).find("option[value='29'],option[value='30'],option[value='31']").remove(); var daysOptions = ""; if (days_in_month >= 29) { daysOptions += '<option value="29">29</option>'; } if (days_in_month >= 30) { daysOptions += '<option value="30">30</option>'; } if (days_in_month == 31) { daysOptions += '<option value="31">31</option>'; } $(select_day).append(daysOptions);
http://jsfiddle.net/sL4jY/10/在IE chrome和Firefox中进行了测试