如何在除Firefox以外的所有其他浏览器中使用此功能

时间:2010-07-28 21:43:56

标签: 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 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中运行良好,但在任何其他浏览器中都不起作用。我不知道为什么。任何浏览器都不会显示错误。

1 个答案:

答案 0 :(得分:3)

您无法隐藏/显示此跨浏览器的<option>元素,您需要拥有备份/隐藏<select>并且只复制您想要的每个<option>元素时间,或者只是禁用您不想选择的<option>元素,但这会让它们可见。

克隆位看起来像这样:

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的变量中,清空(通过.empty())UI中可见的选项,然后循环/克隆您想要的选项可以看到可见的选择。