Javascript 如何在除Firefox以外的所有其他浏览器中实现此功能

Javascript 如何在除Firefox以外的所有其他浏览器中实现此功能,javascript,jquery,cross-browser,Javascript,Jquery,Cross Browser,我有一个带有数字的选择列表。这些数字从0到30。我想根据当前日期和用户设置的日期之间的天数隐藏数字 所以如果今天是2010年7月28日,他们设定的是2010年7月29日,那么它应该只显示0 如果是2010年7月28日,他们设定为2010年9月20日,那么应该显示0到30 所以我有这个 var selectedDate = new Date($('#TextBox').val().replace(/\/(\d\d)$/, "/20$1")); var currentDate = new

我有一个带有数字的选择列表。这些数字从0到30。我想根据当前日期和用户设置的日期之间的天数隐藏数字

所以如果今天是2010年7月28日,他们设定的是2010年7月29日,那么它应该只显示0

如果是2010年7月28日,他们设定为2010年9月20日,那么应该显示0到30

所以我有这个

  var selectedDate = new Date($('#TextBox').val().replace(/\/(\d\d)$/, "/20$1"));
    var currentDate = new Date();

    var month = currentDate.getMonth() + 1
    var day = currentDate.getDate()
    var year = currentDate.getFullYear()

    currentDate = new Date(month + "/" + day + "/" + year);


    if (isNaN(selectedDate) == false)
    {
        $('#selectList').find('select').attr('disabled', '');

        var diffDays = parseInt((selectedDate  - currentDate) / (1000 * 60 * 60 * 24));

        var Options = $('#selectList').find('option');

        jQuery.each(Options, function (i, value)
        {
            var currentValue = $(this).val();
            if (currentValue == -1)
            {
                // equal to continue;
                return true;
            }
            else if (currentValue >= diffDays)
            {
                $(this).hide();
            }
            else
            {
                $(this).show();
            }
        });
    }
此代码发生在用户选择日期的文本框发生更改时


这在FireFox中运行良好,但在任何其他浏览器中都不起作用。我不知道为什么。任何浏览器中都不会显示任何错误。

您无法隐藏/显示这种跨浏览器的元素,您需要备份/隐藏并每次仅复制所需的元素,或者只禁用不希望选择的元素,但这将使它们可见

克隆位的外观如下所示:

var hiddenSelect = $("#selectList").find('select').clone();
var selectedDate = new Date($('#TextBox').val().replace(/\/(\d\d)$/, "/20$1"));
var currentDate = new Date();

var month = currentDate.getMonth() + 1
var day = currentDate.getDate()
var year = currentDate.getFullYear()

currentDate = new Date(month + "/" + day + "/" + year);


if (isNaN(selectedDate) == false) {
    $('#selectList').find('select').attr('disabled', '');
    var diffDays = parseInt((selectedDate  - currentDate) / (1000 * 60 * 60 * 24));

    var select = $('#selectList').find('select').empty();
    hiddenSelect.children().each(function(i, value) {
        if (value == -1) {
            return true;
        }
        else if (currentValue < diffDays) {
            $(this).clone().appendTo(select);
        }      
    });
}

我们只是在一个名为hiddenSelect的变量中保留原始文件的克隆副本,通过用户界面中可见文件上的选项清空,然后循环/克隆要查看的选项回到可见文件中。

您无法隐藏/显示像这种跨浏览器的元素,您需要备份/隐藏并每次仅复制所需的元素,或者仅禁用不希望选择的元素,但这将使它们可见

克隆位的外观如下所示:

var hiddenSelect = $("#selectList").find('select').clone();
var selectedDate = new Date($('#TextBox').val().replace(/\/(\d\d)$/, "/20$1"));
var currentDate = new Date();

var month = currentDate.getMonth() + 1
var day = currentDate.getDate()
var year = currentDate.getFullYear()

currentDate = new Date(month + "/" + day + "/" + year);


if (isNaN(selectedDate) == false) {
    $('#selectList').find('select').attr('disabled', '');
    var diffDays = parseInt((selectedDate  - currentDate) / (1000 * 60 * 60 * 24));

    var select = $('#selectList').find('select').empty();
    hiddenSelect.children().each(function(i, value) {
        if (value == -1) {
            return true;
        }
        else if (currentValue < diffDays) {
            $(this).clone().appendTo(select);
        }      
    });
}

我们只是在一个名为hiddenSelect的变量中保留原始文件的克隆副本,通过用户界面中可见文件上的选项清空,然后循环/克隆您希望看到的选项回到该可见文件中。

您尝试过currentDate=new dateyear,month-1,day??我不确定isNaN是否在使用新日期构建的日期上工作。它肯定可以在使用Date.parse构造的时间戳上工作。在检查isNaN之后,您可以使用新的Datetimestamp创建日期。您是否尝试过currentDate=new dateyear,month-1,day??我不确定isNaN是否在使用新日期构建的日期上工作。它肯定可以在使用Date.parse构造的时间戳上工作。在检查isNaN之后,您可以使用新的Datetimestamp创建日期。如果我有5个SelectListAll 0到30,我如何克隆它,我将如何克隆它?是否必须围绕hiddenSelect进行每个循环。children@chobo2-如果每个选择中的选项文本/值相同,是的,您可以只存储其中任何一个选项的克隆一次,然后为正在填充的每个选项循环相同的克隆。嗯,很有趣。如果我有5个SelectListAll 0到30,我如何克隆它,我将如何克隆它?是否必须围绕hiddenSelect进行每个循环。children@chobo2-如果每个选择中的选项文本/值相同,则可以只存储其中任何选项的克隆一次,然后为正在填充的每个选项循环相同的克隆。