3

jQuery UI 日付ピッカーを埋め込む単純な jQuery (1.4.2) UI (1.8) ウィジェットを作成しました。ユーザーがウィジェットの外をクリックしたことを検出したいのですが、その場合、ウィジェットは自動的に非表示になります。私のコードはおおよそ次のようになります。

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() チェックは失敗します。

何が起こっていますか?どうすればこれを修正できますか?

4

1 に答える 1

4

datepicker のソースを少し調べたところ、何が起こっているのかわかりました。明らかに、日付をクリックするか、月を循環すると、div全体が空になり、再作成されます。

ピッカーは DOM のさらに下にあるため、最初にクリック イベントを処理します。ドキュメント ハンドラーが呼び出されるまでに、ターゲット要素は DOM 内に存在しないため、コンテナーの子孫ではなくなります。

私の性急なハックは、ターゲットのより直接的な親をチェックして、それらのいずれかが日付ピッカー テーブルまたはヘッダーであるかどうかを確認することでした。これまでのところ、このウィジェットは datepicker の唯一の使用であるため、そのような要素のクリックは、コンテナーの外側のクリックとしてカウントされるべきではないと想定できます。

実際の解決策を思いついたら、この回答を更新します。

于 2010-08-26T00:59:18.993 に答える