jqueryUI datepicker запускает размытость входа перед передающей датой, избегайте/обходными решение?

Сделайте http://mathworld.wolfram.com/Line-LineIntersection.html для строки и каждой стороны прямоугольника.
Или: http://mathworld.wolfram.com/Line-PlaneIntersection.html

22
задан Purrell 29 November 2009 в 00:48
поделиться

2 ответа

Когда пользователь щелкает мышью за пределами поля ввода (чтобы выбрать дату), поле ввода размывается. Нет никакого способа обойти это. Поэтому вместо запуска проверки по размытию используйте обратный вызов onSelect для datepicker.

$('.selector').datepicker({
    onSelect: function(dateText) { /* validation here */ }
});

Если вы хотите сохранить свои onblur-события, вы можете отложить проверку, чтобы позволить datepicker заполнять поле до срабатывания проверки, например :

$('#myform input').blur(function () {
    setTimeout(function () { /* validation here */ }, 1);
});

Использование setTimeout для обработки проблем с параллелизмом может выглядеть как взлом, но из-за однопоточной природы сценариев JavaScripts он работает довольно хорошо. Джон Ресиг из jQuery-fame говорит об этом в этом блоге .

16
ответ дан 29 November 2019 в 04:46
поделиться

Ответ Magnars выше очень хорош. Просто чтобы дать больше информации для потомков, вот также подход, который хорошо работает с фреймворками валидации, которые выполняют валидацию по размытию. Я фактически отключаю событие размытия, которое было настроено проверкой на document.ready / pageload (довольно распространенный шаблон для проверки), а затем возвращаю его в опцию onclose datepicker. Событие закрытия datepicker, по-видимому, происходит после того, как datepicker передал информацию в поле, поэтому в этот момент можно запустить проверку размытия. Таким образом, мне не нужно делать ничего особенного для поля в самом коде проверки. Любой из подходов, вероятно, применим ко всему, что делает кто-то другой, если они сталкиваются с этим.

$('#datefield').datepicker(
{beforeShow: function(input) {
                             $(input).unbind('blur');
             },
 onClose: function(dateText, inst) {
                             $(this).validationEngine();this.focus();this.blur() }
});

(В моей структуре '.validationEngine ()' - это то, что регистрирует обработчики проверки)

5
ответ дан 29 November 2019 в 04:46
поделиться
Другие вопросы по тегам:

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