2013-01-21 95 views
5

我有一個jQuery腳本,當鍵盤上的任何鍵被按下時顯示div。我想爲腳本添加一個條件,只有當頁面上沒有其他輸入區域(textarea或texfields)在焦點時纔會運行該腳本。這樣你就可以在頁面的其餘部分實際輸入而不顯示div。檢查是否有任何輸入元素焦點

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

謝謝。如果需要,我可以給頁面上的其他每個textarea使用相同的ID。

+0

BTW你不能 「把相同的ID」 推薦 - 重複的ID是無效的HTML和你JS/jQuery只會捕獲第一個元素。 –

回答

13

使用jQuery的focus pseudoselector

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

或者爲你的代碼示例

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

@FabrícioMatté - 是的,同意。但我認爲對於新開發者來說,它明確指出了發生的事情。感謝您修復我的代碼錯誤。 – mrtsherman

+0

沒問題,只是添加了一個附註 - 我個人更喜歡較短的條件if($('input:focus')。length)'和if(!$('input:focus')。其中所輸入和讀取的字符較少,再加上所有開發人員必須學習如何在某個時刻處理真值和虛假值。但是,是的,這大多是個人喜好。 '=]' –

+0

這工作很好。非常感謝。我擔心我必須指定頁面上的每個文本字段,這些字段實際上是多餘的。再次感謝。 – centree

3

使用jQuery,所有你需要做的是搜索當前處於焦點輸入或textarea元素。

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

您可以使用jQuery的.is()document.activeElement這個樣子。

var targetInput = $('#myInput'); 

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

JSFiddle

+0

+1,但請記住[這是僅HTML5](https://developer.mozilla.org/en-US/docs/DOM/document.activeElement)。 –

+1

@JosephSilber什麼?它說IE4的支持。 *困惑* –

+0

@FabrícioMatté - 我也是。 **該屬性是正在開發的HTML 5規範的一部分。** –

1

我想用這個對於任何形式的輸入

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