created() { let that = this; document.onkeypress = function(e) { var keycode = document.all ? event.keyCode : e.which; if (keycode == 13) { that.login();// 登陸方法名 return false; } }; }
以上的代碼,在這幾天測試發現有一個問題,在登陸進系統以後,從首頁切換到其餘界面,點擊回車,會致使界面調整到首頁!html
要實現:只在Login界面點擊回車才執行onkeypress方法,其餘的點回車均不觸發(還不明白爲何在其餘界面回車會執行Login界面的created-_-|| )vue
思路:在Login.vue最外層綁定id,再綁定鍵盤事件。 測試
$(「#loginDiv」).bind("keypress",toLogin);this
測試發現監聽不到按鍵事件,由於div元素無法獲取焦點,但只要爲div元素加上tabIndex屬性就能獲取焦點spa
<div id="loginDiv" tabIndex=-1></div>.net
以上方法雖然也能觸發keypress,但還有點瑕疵~ 就是打開登陸頁時,須要鼠標點一下界面,才能觸發keypress!!!code
又一思路:界面中須要有一個聚焦,在回車時纔好執行keypress。故在界面中加input文本框,讓無論從哪裏打開或跳到Login.vue都聚焦文本框htm
因此自定義指令:blog
<div id="loginDiv" tabindex="1" style="outline:0;" > <input type="text" v-focus style="opacity:0;position:absolute;"> </div>
directives: { focus: { // 指令的定義 inserted: function (el) { el.focus() } } },
自定義指令及inserted用法截圖自vue官網文檔以下:事件
解決方法參考自:
https://blog.csdn.net/zh1159007904/article/details/78026517
https://www.cnblogs.com/hjj2ldq/p/7831972.html