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

J’ai une zone de texte qui a un filtre lorsque vous tapez des résultats en dessous. J’ai jQuery qui détecte quand le focus quitte la zone de texte afin qu’il puisse masquer les résultats div. MAIS je ne veux pas cacher les résultats si les résultats sont cliqués sur afin que je puisse utiliser ce clic pour redirect vers une page différente pour cet élément.

J’utilise .has(":focus") pour vérifier si mes résultats div ou l’un de ses enfants ont le focus. Mon problème est que cela ne fonctionne que dans IE autant que je sache. Quelqu’un sait pourquoi?

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

MISE À JOUR: Grâce à Climbage, ça fonctionne …

 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 } }); 

Exemple de travail: http://jsfiddle.net/cB2CN/

Le problème est que tous les éléments du DOM n’acceptent pas le focus, et que le navigateur en décide le choix. Voir Quels éléments HTML peuvent recevoir le focus?

Vous avez peut-être un événement #ResultsDIV sur votre #ResultsDIV qui définit une variable globale pour déterminer si l’élément a le focus lorsque vous cliquez dessus.