vue之在頁面中監聽鍵盤的Enter鍵來觸發某個按鈕事件
阿新 • • 發佈:2019-01-04
專案中得需求:給頁面某個按鈕繫結Enter鍵,但是按鈕不在form中,直接給按鈕繫結後此按鈕只有獲取了焦點按鍵才會觸發,顯然,一直保持按鈕獲取焦點是不現實得。所以通過查詢等,結合專案需求,完成了下面得程式碼,希望對大家有用,歡迎一起探討,Email:[email protected]
首先,一直在想怎樣能夠不管焦點在本頁面得那裡,點選Enter鍵得時候都能夠觸發按鈕事件,然後開始想。。。。
本專案為vue專案:
1.在頁面得created中來監聽鍵盤得按鍵事件,焦點在本頁面任何地方,都可以通過下面得程式碼來監聽,當然,不止於本頁面,留著後面說。
created(){ var lett = this; /** * */ document.onkeydown = function(e) { //1.規避頁面上方的搜尋框等是否獲取了焦點,是則不觸發本次快捷鍵 var inputs = document.getElementsByClassName('isfocus_enter'); //找到這一組元素 //是否獲取了焦點的判斷 let hasFocus = false; if(inputs && inputs.length >0){ for(let i=0;i<inputs.length;i++){ //如果hasFocus為true表示input元素獲得焦點,否則沒有獲得焦點 hasFocus = document.hasFocus() && document.activeElement === inputs[i]; if(hasFocus == true){ break; } } } console.log("判斷不該獲取焦點的元素是否獲取了焦點(isfocus_enter):%s",hasFocus); if(lett.displayWindow == true //停車收費單開啟 && lett.editHide != true //編輯關閉 && lett.yktHide != true //一卡通支付關閉 && lett.openHide != true //強行起杆關閉 && lett.addNewOderHide != true //補入場記錄關閉 && lett.offSiteHide != true && lett.contListHide != true && hasFocus != true ){ var key = window.event.keyCode; console.log("按鍵:%s",key); if (key == 13) { lett.edit2(); //此方法是當按下enter鍵後要做的動作。 } } } },
這裡由於當前頁面有些輸入框也綁定了enter鍵,這樣會有衝突,所以這裡判斷要是焦點在綁定了enter鍵得輸入框上,就不執行此次監聽。ps:知識點:如何獲取當前焦點所在得元素