2

その下に結果を入力すると、フィルターを持つテキストボックスがあります。結果のdivを非表示にできるように、フォーカスがテキストボックスを離れたことを検出するjQueryがあります。しかし、結果がクリックされた場合、そのクリックを使用してそのアイテムの別のページにリダイレクトできるように、結果を非表示にしたくありません。

.has(":focus")結果divまたはその子のいずれかにフォーカスがあるかどうかを確認するために使用しています。私の問題は、私が知る限り、これは IE でしか機能しないことです。理由を知っている人はいますか?

$("#TextBox").blur(function () {
    if ($("#ResultsDIV").has(":focus").length == 0) {  //if you click on anything other than the results
        $("#ResultsDIV").hide();  //hide the results
    }
});

更新: Climbage のおかげで、これが機能するようになりました...

var resultsSelected = false;
$("#ResultsDIV").hover(
    function () { resultsSelected = true; },
    function () { resultsSelected = false; }
);
$("#TextBox").blur(function () {
    if (!resultsSelected) {  //if you click on anything other than the results
        $("#ResultsDIV").hide();  //hide the results
    }
});

作業例: http://jsfiddle.net/cB2CN/

4

1 に答える 1

3

問題は、DOM 上のすべての要素が実際にフォーカスを受け入れるわけではないことです。どの要素がフォーカスを受け入れるかはブラウザ次第です。フォーカスを受け取ることができる HTML 要素を参照してください。

おそらく、グローバル変数を設定して、クリックしたときに要素にフォーカスがあるかどうかを判断するhoverイベントが発生するでしょう。#ResultsDIV

于 2012-04-30T23:35:50.267 に答える