2013-01-21 13 views
5

Ich habe ein jquery-Skript, das ein Div anzeigt, wenn eine Taste auf der Tastatur gedrückt wird. Ich möchte dem Skript eine Bedingung hinzufügen, die das Skript nur ausführt, wenn kein anderer Eingabebereich (Textarea oder Texfields) auf der Seite im Fokus ist. Auf diese Weise können Sie den Rest der Seite eingeben, ohne das div anzuzeigen.Überprüfen, ob Eingangselemente im Fokus sind

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

Danke. Ich kann jedem anderen Textbereich auf der Seite die gleiche ID geben, wenn das nötig ist.

+0

BTW können Sie nicht "geben die gleiche ID" empfehlen - Ihre duplizierten IDs sind ungültig HTML und JS/jQuery fängt nur das erste Element ab. –

Antwort

13

Ilses jQuery focus pseudoselector

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

Oder suchen Sie Ihr Codebeispiel

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

@ FabrícioMatté - Ja, einverstanden. Aber ich denke für neue Entwickler, dass es explizit darauf hinweist, was vor sich geht. Danke, dass du meine Code-Fehler behoben hast. – mrtsherman

+0

Kein Problem, nur hinzugefügt, dass als Randnotiz - ich persönlich bevorzuge die kürzeren Bedingungen 'if ($ ('input: focus'). Length)' und 'if (! $ ('Input: focus'). Length)' die zum Schreiben und Lesen weniger Zeichen benötigen, und alle Entwickler müssen irgendwann lernen, wie sie mit truthigen und falschen Werten umgehen. Aber ja, es ist meistens nur persönliche Vorliebe. '=]' –

+0

Das hat wunderbar funktioniert. Vielen Dank. Ich hatte Angst, ich müsste jedes Textfeld auf der Seite angeben, das wirklich überflüssig wäre. Danke noch einmal. – centree

3

Mit jQuery, alles, was Sie tun müssen, ist die Suche nach Eingabe oder Textbereich Elementen, die zur Zeit im Fokus sind.

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

Sie können mit jQuery .is() und document.activeElement wie diese.

var targetInput = $('#myInput'); 

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

JSFiddle

+0

+1, aber denken Sie daran, dass [dies ist nur HTML5] (https://developer.mozilla.org/en-US/docs/DOM/document.activeElement). –

+1

@JosephSilber was? Es sagt IE4 Unterstützung. * verwirrt * –

+0

@ FabrícioMatté - Ich auch. ** Dieses Attribut ist Teil der in Entwicklung befindlichen HTML 5-Spezifikation. ** –

1

würde Ich mag mit diesem für alle Formulareingaben

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