FF / Chrome / Safari中的jQuery .has(“:focus”)

时间:2012-04-30 23:25:42

标签: jquery jquery-selectors

我有一个文本框,当您在其下方输入结果时会有过滤器。我有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/

1 个答案:

答案 0 :(得分:3)

问题在于DOM上的所有非元素实际上都接受焦点,并且由浏览器决定哪些元素可以。见Which HTML elements can receive focus?

可能在hover上有一个#ResultsDIV事件设置一个全局变量,以确定该元素在点击时是否具有焦点。