目前有一個需求,用戶可以手寫輸入 也可以 掃描槍輸入,使用安卓的一個機器,進行掃描二維碼 讀取內容 並查找展示
掃描槍原理:模擬移動端輸入鍵盤,從而將獲取的內容賦值在獲取焦點的input上 (掃到東西的話會自動在焦點處輸出)
因為是模擬輸入鍵盤 實際上 掃描槍輸入完成以后,會自動吊起移動端小鍵盤,現在就如何在掃描的時候 不掉起小鍵盤 ,只進行賦值。
解決方法:
1.利用input readonly屬性
試驗了一下,當input有readonly屬性的時候,即使獲取焦點,也不會吊起小鍵盤
利用這個特性,在獲取到內容以后,給input添加readonly屬性,使得小鍵盤不出現,進行操作以后 再講屬性移除,這樣既獲取了焦點,又沒有吊起小鍵盤,之后還可以進行掃碼操作
if($(this).val().trim().length>0){ 獲取到內容以后,給input添加readonly屬性 input.attr('readonly',true) time1=setTimeout(function() { $.ajax({ type: "POST", url: "/yili/signin/byqrcode", beforeSend:function(){ clearTimeout(time1); }, data: “”, success: function (data) { }, complete: function () { 查詢結束后,給input移除readonly屬性,此時焦點依然在Input上,可以直接進行下一次操作 input.attr('readonly',false) }, error: function () { console.log("提交失敗!"); } }); }, 1000) }
其他普及:
掃碼槍輸入的間隔大概在15-60毫秒,然后手動輸入的100-200毫秒之間
input輸入事件,包括 keydown 鍵盤(剛剛)按下,keypress 鍵盤(已經)按下,keyup 鍵盤抬起,
keydown,在按鍵剛剛被按下,但值還沒有寫入input
keypress 已經按下並且值已經輸入到文本框
keyup 就是鍵盤彈起 可以利用keyup來判斷input輸入的內容,因為已經是輸入完成
初始化獲取焦點 而又不掉起鍵盤 可以為input添加 autofocus 屬性 ,頁面初始化的時候執行 ,只執行一次