2016-04-05 12 views
12

Powiedzmy mam następujący div, który pobiera skupić po pewien warunek jest spełniony:Jak mogę sprawdzić, czy mój identyfikator elementu ma fokus?

<div id="myID" tabindex="-1" >Some Text</div> 

Chcę utworzyć uchwyt, który sprawdza, czy nie, że div ma fokus, a kiedy wartość true/focus jest na div, coś zrobić (w przykładzie poniżej, wydrukować dziennik konsoli):

if (document.getElementById('#myID').hasFocus()) { 
      $(document).keydown(function(event) { 
       if (event.which === 40) { 
        console.log('keydown pressed') 
       } 
      }); 
     } 

dostaję komunikat o błędzie w konsoli, który mówi:

TypeError: nie można odczytać właściwość „hasFocus "o wartości zerowej

Każdy pomysł, co robię źle tutaj? Może sposób, w jaki przekazuję div id?

+5

patrz wątek http://stackoverflow.com/questions/497094/how-do-i-find -out-który-dom-element-ma-fokus – Brij

Odpowiedz

5

Użyj document.activeElement

Powinien działać.

P.S getElementById("myID") nie getElementById("#myID")

5

Jeśli chcesz użyć jQuery $("..").is(":focus").

Można przyjrzeć się tym stack

2

To jest element bloku, tak aby była ona w stanie odbierać ostrość, trzeba dodać tabindex atrybut do niego, tak jak w

<div id="myID" tabindex="1"></div> 

Tabindex pozwoli temu elementowi uzyskać fokus. Użyj tabindex="-1" (lub po prostu pozbyć się całego atrybutu), aby uniemożliwić to zachowanie.

I wtedy można po prostu

if ($("#myID").is(":focus")) {...} 

Albo użyć

$(document.activeElement) 

As sugerowano wcześniej.

+0

Zwróć także uwagę na literówkę w 'getElementById'. –

+0

Dziękuję. Miałem już przypisany tabindex -1. Metoda $ (document.activeElement) działa, ale nie jest specyficzna dla elementu div, dla którego sprawdzam fokus ("myID"). Wywołuje instrukcję if, gdy DOW ma fokus, nie tylko ten, który mnie interesuje ("myID") –

+0

Metoda jQuery w ogóle nie działa –

20

Porównaj element document.activeElement z elementem, który chcesz sprawdzić ostrość. Jeśli są takie same, element jest skupiony; inaczej nie jest.

// dummy element 
var dummyEl = document.getElementById('myID'); 

// check for focus 
var isFocused = (document.activeElement === dummyEl); 

hasFocus jest częścią document; nie ma takiej metody dla elementów DOM.

Ponadto, document.getElementById nie używa # na początku myID. Zmień to:

var dummyEl = document.getElementById('#myID'); 

do tego:

var dummyEl = document.getElementById('myID'); 

Jeśli chcesz użyć kwerendy CSS zamiast można użyć querySelector (i querySelectorAll).

+1

Co za wymowne rozwiązanie! Doświadczyłem tego przez ostatnie 2 godziny. –

-3

Zapis poniżej kodu w skrypcie, a także dodać biblioteki jQuery

var getElement = document.getElementById('myID'); 

if (document.activeElement === getElement) { 
     $(document).keydown(function(event) { 
      if (event.which === 40) { 
       console.log('keydown pressed') 
      } 
     }); 
    } 

Dziękuję ...

Powiązane problemy