Можно ли сопоставить указатель даты jQuery UI с целью события клика? - PullRequest
3 голосов
/ 26 августа 2010

Я написал простой виджет jQuery (1.4.2) UI (1.8), который встраивает средство выбора даты jQuery UI. Я хотел бы определить, когда пользователь нажимает вне моего виджета, и в этом случае он должен автоматически скрываться. Мой код выглядит примерно так:

var self = this;
$(document).bind("click.mywidget": function(event) {
    var target = event.target;
    if (!self.container.has(target).length && target != self.container.get(0)) {
        self.hide();
    }
});

Проблема возникает при нажатии кнопки выбора даты или месяца вперед / назад в средстве выбора даты. По какой-то причине, хотя Firebug показывает, что эти элементы являются потомками моего контейнера, проверка has () для них не удалась.

Что происходит, и как я могу это исправить?

1 Ответ

4 голосов
/ 26 августа 2010

Немного покопавшись в источнике выбора даты, я понял, что происходит. По-видимому, всякий раз, когда вы нажимаете на дату или циклически изменяете месяцы, она очищает весь div и заново его создает.

Поскольку средство выбора находится ниже в DOM, оно сначала обрабатывает событие щелчка. К тому времени, когда обработчик документа вызывается, целевой элемент больше не находится в DOM и, следовательно, больше не является потомком контейнера.

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

Я обновлю этот ответ, как только найду реальное решение.

...