2011-01-01 15 views

Odpowiedz

15

Skoro znalazłeś document.activeElement, można sprawdzić jego parametr nodeName.

if (document.activeElement.nodeName == 'TEXTAREA' || document.activeElement.nodeName == 'INPUT') { 
    // .... 
} 

Coś w tym stylu.

+0

Dzięki, ale jak mogę uzyskać obiekt jQuery z document.activeElement? –

+1

$ (document.activeElement) –

+0

To nie sprawdza edytowalnych HTMLDivElements. Zobacz moją odpowiedź poniżej. –

2
$('#yourTextAreaID:focus'); 

nie działa. :) Ale

$('#yourTextAreaID').focus(function(){ 
    // do something 
}); 

byłoby excecute kod //do something gdy element otrzymuje się skupić.

+0

Ok, ale w danym momencie (nie neccesarily gdy użytkownik kliknie pole tekstowe) w jaki sposób mogę sprawdzić czy dowolny pole tekstowe ma fokus? –

+0

Biorąc pod uwagę, że OP nie dba o to "który to jest", sugerowałbym zmianę selektora na: '$ ('textarea: focus, input: text: focus') ...' –

+0

Właśnie znalazłem dokument. activeElement. Jak sprawdzić, czy jest to pole tekstowe lub tekstowe? –

1
$('#target').focus(function() { 
    alert('Handler for .focus() called.'); 
}); 

Spróbuj również:

alert($("*:focus").attr("id")); 

http://jsfiddle.net/4KVvV/

+0

jako @lonesome wskazano powyżej,: hover nie jest rzeczywistym selektorem jquery. Myślałem, że to też, ale kiedy sprawdziłem dokumentację, nie mogłem tego znaleźć. – JakeParis

6

OK, właśnie to wymyśliłem. Oto co zrobiłem:

function checkFocus() { 

    if ($(document.activeElement).attr("type") == "text" || $(document.activeElement).attr("type") == "textarea") { 

    //Something's selected 

    return true; 

} 

} 
+0

Ktoś oznaczył to jako odpowiedź, mówi, że muszę poczekać 2 dni. :) –

+2

jesteś jedyną osobą, która * może * oznaczyć to jako odpowiedź. Zobacz także stronę pomocy Stackdown Markdown (http://stackoverflow.com/editing-help/), aby uzyskać wskazówki dotyczące formatowania odpowiedzi, w szczególności próbek kodu. –

+0

Pamiętaj, że będzie to działać we wszystkich nowoczesnych przeglądarkach, ale * nie będzie działać * w wielu przestarzałych przeglądarkach. Zajrzyj do [tej odpowiedzi] (http://stackoverflow.com/questions/1009777/determining-which-element-has-focus/1009787#1009787), aby znaleźć technikę pozwalającą temu zaradzić. – lonesomeday

2

Rozszerzanie zaakceptowane odpowiedź przez czekiem na edytowalnych HTMLDivElements:

if (document.activeElement.nodeName == 'TEXTAREA' 
    || document.activeElement.nodeName == 'INPUT' 
    || (document.activeElement.nodeName == 'DIV' 
     && document.activeElement.isContentEditable)) { 
    // … 
} 
Powiązane problemy