Как заставить это работать во всех других браузерах, кроме Firefox - PullRequest
0 голосов
/ 29 июля 2010

У меня есть список выбора с номерами в нем.Эти числа идут от 0 до 30. Я хочу скрыть числа, основанные на количестве дней, кроме текущей даты и даты, которую пользователь установил.

Так что, если сегодня 28 июля 2010 г., и они установлены 29 июля 2010 г.он должен показывать только «0».

Если это было 28 июля 2010 года, и они установили 20 сентября 2010 года, то должно быть от 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 Ответ

3 голосов
/ 29 июля 2010

Вы просто не можете скрыть / показать <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()) параметров видимого в пользовательском интерфейсе и циклическое переключение / клонирование параметров, которые вы хотите чтобы вернуться в этот видимый выбор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...