沒耐心的朋友,能夠直接看代碼。javascript
最近在作一個關於收銀臺的項目,其中有一個需求,是掃碼槍掃描支付碼進行支付。掃碼槍觸發的事件,實際上是一個keyup enter
事件,要捕獲到這個事件,必須將焦點定在支付碼輸入框內才能夠。java
inputEle=document.getElementById('focusInput'); inputEle.focus(); inputEle.onblur=function(){ inputEle.focus(); };
一開始的時候,定義焦點在文本框,當文本框失去焦點的時候從新定焦在文本框。很簡單的方法,就實現了固定焦點的要求。code
後來這個頁面上又多了搜索框和商品列表,那麼,當焦點在其餘文本框的時候,如何判斷使其能正常輸入呢?事件
起初,我仍是按上面方法去作,卻發現,鼠標不管如何點擊,document.activeElement(當前焦點坐在元素)
始終是body
元素。這樣,就沒法判斷,焦點是否在文本框。因而我想到了用定時器來作,代碼以下:ip
var focus=function(){ setTimeout(function(){ let activeElement=document.activeElement; if(activeElement.type!=='text'){ inputEle.focus(); } focus(); },60); } focus();
定時器每隔60ms檢查一次,當發現焦點不在文本框裏,則定焦到最初的文本框,不然不改變焦點。get
用上面兩種方法,基本上就能夠知足全部固定焦點的狀況了。input