1. 程式人生 > >vue之在頁面中監聽鍵盤的Enter鍵來觸發某個按鈕事件

vue之在頁面中監聽鍵盤的Enter鍵來觸發某個按鈕事件

專案中得需求:給頁面某個按鈕繫結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:知識點:如何獲取當前焦點所在得元素