Сделайте http://mathworld.wolfram.com/Line-LineIntersection.html для строки и каждой стороны прямоугольника.
Или: http://mathworld.wolfram.com/Line-PlaneIntersection.html
Когда пользователь щелкает мышью за пределами поля ввода (чтобы выбрать дату), поле ввода размывается. Нет никакого способа обойти это. Поэтому вместо запуска проверки по размытию используйте обратный вызов onSelect для datepicker.
$('.selector').datepicker({
onSelect: function(dateText) { /* validation here */ }
});
Если вы хотите сохранить свои onblur-события, вы можете отложить проверку, чтобы позволить datepicker заполнять поле до срабатывания проверки, например :
$('#myform input').blur(function () {
setTimeout(function () { /* validation here */ }, 1);
});
Использование setTimeout для обработки проблем с параллелизмом может выглядеть как взлом, но из-за однопоточной природы сценариев JavaScripts он работает довольно хорошо. Джон Ресиг из jQuery-fame говорит об этом в этом блоге .
Ответ 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 ()' - это то, что регистрирует обработчики проверки)