2

我有一个文本框,当您在其下方键入结果时,该文本框具有过滤器。我有 jQuery 可以检测焦点何时离开文本框,因此它可以隐藏结果 div。但是,如果单击结果,我不想隐藏结果,以便我可以使用该单击重定向到该项目的不同页面。

.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 回答