2016-04-24 86 views
1

我遇到了一些功能問題。檢測出焦點擊鍵,集中輸入並填充它(jquery)

當沒有輸入焦點時,我想要捕獲用戶按鍵,專注於特定輸入,然後將所有已開始輸入的文本輸入到該輸入中,然後輸入任何前進的內容,直到他們移除焦點那個輸入。

我的問題似乎是由於jquery的滯後?如果你開始輸入「這僅僅是一個測試」成以下的jsfiddle

https://jsfiddle.net/bjgngayq/1/

HTML: <input type="text" id="search" /> 

JS: 
$(function() { 
    $(document).on('keypress', function(e) { 
     var tag = e.target.tagName.toLowerCase(); 
     if (e.which === 115 && tag != 'input' && tag != 'textarea' && tag != 'select') { 
      $('#search').focus(); 
      $('#search').val(String.fromCharCode(e.which)); 
     } 
    }); 
}); 

這似乎跳過前幾個字母「氏」,然後加倍最後一個按鍵,你結束了「 ss只是一個測試「

可以有人(如果知道)在爲什麼這是發生和在哪裏看。我正在尋找更多的原因而不是解決方案 - 如果我瞭解問題,我可以找出解決方案。

乾杯。

回答

3

「Thi」被截斷的原因是因爲input在輸入「s」之前沒有被聚焦。這是因爲在您的情況中包含了e.which === 115

你得到一個雙「SS」的原因是因爲你從實際按「S」鍵得到一個「s」手動從這一行$('#search').val(String.fromCharCode(e.which)),但隨後又另一個「S」自動。

這應該做的伎倆:

$(function() { 
    $(document).on('keypress', function(e) { 
     var tag = e.target.tagName.toLowerCase(); 
     if (tag != 'input' && tag != 'textarea' && tag != 'select') { 
      $('#search').focus(); 
     } 
    }); 
}); 

或者,你可以更改爲keyup事件,所以自動「S」沒有得到類型,因爲input不會獲得焦點,直到後來。

工作小提琴:https://jsfiddle.net/bjgngayq/3/

+0

OK,如果輸入的是隱藏的,我只好先取消隱藏什麼?那麼,當元素被隱藏時,焦點似乎被忽略了?是否可以放置某種類型的計時器,並緩存用戶擊鍵,直到元素具有焦點,然後將緩存複製並允許從那時開始的擊鍵追加? – Trent

+0

@Trent是否應該在按鍵,取消隱藏和重點之間有任何有意的延遲?我不確定我是否理解需要定時器。 – digglemister

+0

@Trent爲什麼不在聚焦之前在'keypress'上使用'.show()':https://jsfiddle.net/bjgngayq/5/ – digglemister