2013-01-21 12 views
5

Mam skrypt jQuery, który wyświetla element div po naciśnięciu dowolnego klawisza na klawiaturze. Chciałbym dodać warunek do skryptu, który uruchomi skrypt tylko wtedy, gdy żaden inny obszar wejściowy (textarea lub texfields) nie będzie ostry na stronie. W ten sposób możesz wpisać na pozostałą część strony bez pokazywania elementu div.Sprawdź, czy dowolne elementy wejściowe są ostre

$(document).on('keydown', function (e) { 
    if (!$('#test').is(':visible')) { 
     //######## IF (every input is not active....) { 
     if (65 <= e.keyCode && e.keyCode <= 90) { 
      $(elem).fadeIn(); 
      $('#textarea').val(''); 
      $('#textarea').focus(); 
      $('#textarea').val(temp); 
     } 
    } 
}); 

Dzięki. Mogę nadać każdemu tekstowi na stronie ten sam identyfikator, jeśli jest to konieczne.

+0

BTW nie można "dać ten sam identyfikator" - powielający Identyfikatory są nieważne HTML i twoi JS/jQuery przechwyci tylko pierwszy element. –

Odpowiedz

13

użyć jQuery za focus pseudoselector

if ($('input:focus').length > 0) { return; } 

Albo za przykład kodu

if ($('input:focus').length == 0) { ... } 
+0

@ FabrícioMatté - Tak, zgodzili się. Ale myślę, że dla nowych programistów wyraźnie wskazuje, co się dzieje. Dziękujemy za naprawienie błędów w kodzie. – mrtsherman

+0

Nie ma problemu, po prostu dodałem, że jako notatkę osobową - ja osobiście wolę krótsze warunki 'if ($ ('input: focus'). Length)' i 'if (! $ ('Input: focus'). Length)' które wymagają mniej znaków do pisania i czytania, a wszyscy programiści muszą w pewnym momencie nauczyć się radzić sobie z wartościami prawdy i fałszerstwa. Ale tak, to tylko osobiste preferencje. '=]' –

+0

To działało cudownie. Dzięki wielkie. Bałem się, że będę musiał określić każde pole tekstowe na stronie, które byłoby naprawdę zbędne. Dzięki jeszcze raz. – centree

3

z jQuery, wszystko co musisz zrobić, to znaleźć wejściowych lub textarea elementów, które są obecnie w centrum uwagi.

if ($('input:focus, textarea:focus').length === 0) { 
    // put some code here... 
} 
5

Można użyć jQuery .is() i document.activeElement tak.

var targetInput = $('#myInput'); 

if(!targetInput.is(document.activeElement)) { 
    alert('Typed while not focused on #myInput!'); 
} 

JSFiddle

+0

+1, ale pamiętaj, że [to tylko HTML5] (https://developer.mozilla.org/en-US/docs/DOM/document.activeElement). –

+1

@JosephSilber co? Mówi o obsłudze IE4. * zdezorientowany * –

+0

@ FabrícioMatté - Ja też. ** Ten atrybut jest częścią opracowywanej specyfikacji HTML 5. ** –

1

Chciałbym polecić za pomocą tego formularza do jakichkolwiek wejść

if ($(':input:focus').length) { ... }