JQuery datepicker всплывающее окно, не закрывающееся в избранную дату в IE8

Статичный предотвращает другую единицу компиляции от externing, что переменная так, чтобы компилятор мог просто "встроить" значение переменной, где это используется и не создает устройство хранения данных памяти для него.

В Вашем втором примере, компилятор не может предположить, что некоторый другой исходный файл не будет экстерн это, таким образом, это должно будет на самом деле сохранить то значение в памяти где-нибудь.

19
задан Notorious2tall 9 November 2009 в 22:33
поделиться

7 ответов

Кажется, это своего рода ошибка, но добавление этой строки в объявление datepicker должно решить ее:

onSelect: function() {}
16
ответ дан 30 November 2019 в 02:33
поделиться

Не похоже, что вы делаете что-то неправильно, поскольку код ValidatorOnChange генерируется для вас; что-то не так в том, как он создает свой объект vals , который в конечном итоге оказывается равным нулю на ie8.

Это было запрошено до , и решение отменяет onSelect функция с функцией no-op.

Это не единственная проблема валидатора. Вот примерно похожая проблема с функцией автозаполнения.

1
ответ дан 30 November 2019 в 02:33
поделиться

Я действительно не знаю, в чем проблема, но я заметил, что у вас нет набора ValidationGroup, и оба ваших валидатора имеют это значение. Вы можете попробовать установить ValidationGroup = "sh" в текстовом поле и посмотреть, поможет ли это.

0
ответ дан 30 November 2019 в 02:33
поделиться

Исправление ...

onSelect: function () {}

.. похоже, не работает, если проблема связана с CustomValidator, который полагается на обработчик побочных событий servewr для проверки ввода.

Здесь упоминается еще пара других исправлений ...

http://dev.jqueryui.com/ticket/4071

Проблема заключается в том, что обработка событий IE отличается от других браузеров и код проверки на стороне клиента, поставляемый ASP Net, не реагирует должным образом на ситуацию, не предусмотренную его авторами.

1
ответ дан 30 November 2019 в 02:33
поделиться

При выборе даты, блок сбора данных инициирует событие изменения в элементе INPUT, но валидатор ASP.Net принимает событие щелчка вместо элемента A и пытается найти валидаторы в элементе A, а не в элементе INPUT. Это можно наблюдать путем проверки события .srcElement внутри функции валидатора ValidatorOnChange. В браузерах, отличных от IE, тип event.type 'change' и event.target правильно является INPUT.

В то время как функция noneop onSelect: function() { } предотвращает ошибку, переопределяя .change(), встроенную по умолчанию onSelect, она также предотвращает срабатывание валидаторов. Вот обходной путь для обоих:

onSelect: function() {
  this.fireEvent && this.fireEvent('onchange') || $(this).change();
}

Это использует обычный триггер .change(), за исключением IE, где необходимо использовать .fireEvent, чтобы объект события был связан с изменением, а не щелчком мыши.

.
27
ответ дан 30 November 2019 в 02:33
поделиться

Это обычная проблема для jQuery datepickers и элементов управления проверкой ASP. Как вы говорите, неправильный элемент перекрестно запускает процедуру проверки javascript ASP NET, а затем код M $ выдает ошибку, потому что триггерный элемент в подпрограмме не определен.

Я решил эту проблему иначе, чем все, кого я видел - решив, что M $ следовало бы написать свой код более надежно, и, следовательно, повторно объявив часть кода валидатора M $, чтобы справиться с неопределенным элементом. Все остальное, что я видел, по сути, является обходным путем на стороне jQuery и сокращает возможные функциональные возможности (например, использование события щелчка вместо изменения).

Бит, который терпит неудачу, - это

   for (i = 0; i < vals.length; i++) {
        ValidatorValidate(vals[i], null, event);
    }

, который выдает ошибку при попытке получить длину для неопределенных 'vals'.

Я только что добавил

if (vals) {
    for (i = 0; i < vals.length; i++) {
        ValidatorValidate(vals[i], null, event);
    }
}

, и она готова. Окончательный код, который повторно объявляет всю нарушающую функцию, приведен ниже. Я помещаю его как сценарий, включаемый в внизу моей главной страницы или страницы (так что это происходит после объявлений по умолчанию и заменяет более раннюю версию).

Да, это нарушит совместимость снизу вверх, если M $ решат изменить свой код валидатора в будущем. Но можно надеяться, что они это исправят, и тогда мы сможем полностью избавиться от этого патча.

//  Fix issue with datepicker and ASPNET validators: redeclare MS validator code with fix
 function ValidatorOnChange(event) {
    if (!event) {
        event = window.event;
    }
    Page_InvalidControlToBeFocused = null;
    var targetedControl;
    if ((typeof (event.srcElement) != "undefined") && (event.srcElement != null)) {
        targetedControl = event.srcElement;
    }
    else {
        targetedControl = event.target;
    }
    var vals;
    if (typeof (targetedControl.Validators) != "undefined") {
        vals = targetedControl.Validators;
    }
    else {
        if (targetedControl.tagName.toLowerCase() == "label") {
            targetedControl = document.getElementById(targetedControl.htmlFor);
            vals = targetedControl.Validators;
        }
    }
    var i;
    if (vals) {
        for (i = 0; i < vals.length; i++) {
            ValidatorValidate(vals[i], null, event);
        }
    }
    ValidatorUpdateIsValid();
}
1
ответ дан 30 November 2019 в 02:33
поделиться

изменить jquery.ui.datepicker.js строка 1504

'" href="#"  >' + printDate.getDate() + '</a>')

с тестом

'" href="javascript:DP_jQuery_' + dpuuid + '.datepicker._selectDay(\'#' +
       inst.id + '\',' + printDate.getMonth() + ',' + printDate.getFullYear() + ', this);"  >' + printDate.getDate() + '</a>')

работает нормально!

1
ответ дан 30 November 2019 в 02:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: