项目中得需求:给页面某个按钮绑定Enter键,但是按钮不在form中,直接给按钮绑定后此按钮只有获取了焦点按键才会触发,显然,一直保持按钮获取焦点是不现实得。所以通过查询等,结合项目需求,完成了下面得代码,希望对大家有用,欢迎一起探讨,Email:qi_dabin@163.com

首先,一直在想怎样能够不管焦点在本页面得那里,点击Enter键得时候都能够触发按钮事件,然后开始想。。。。

本项目为vue项目:

1.在页面得created中来监听键盘得按键事件,焦点在本页面任何地方,都可以通过下面得代码来监听,当然,不止于本页面,留着后面说。

          created(){
		        
			var lett = this;
			/**
			 * 
			 */
			document.onkeydown = function(e) {
				//console.log("按键:" + 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.windFlag == true //停车收费单开启
					&& hasFocus != true
				) {
					var key = window.event.keyCode;
					if(key == 13) {
						//判断是否是下拉的车型获取了焦点
						var inputs2 = document.getElementsByClassName("carTyepId_id");
						if(inputs2 && inputs2.length > 0) {
							for(let i = 0; i < inputs2.length; i++) {
								//如果hasFocus为true表示input元素获得焦点,否则没有获得焦点
								hasFocus = document.hasFocus() && document.activeElement === inputs2[i];
								if(hasFocus == true) {
									inputs2[i].blur();
								}
							}
						}
						lett.edit2();
					}
				}
			}
			
		},

这里由于当前页面有些输入框也绑定了enter键,这样会有冲突,所以这里判断要是焦点在绑定了enter键得输入框上,就不执行此次监听。通过此方法判断可以监听绑定所有键,根据具体业务决定如何使用本次按键的逻辑,比较灵活。

ps:知识点:如何获取当前焦点所在得元素

 

一个编程路上的小菜鸟,希望文章对大家有所帮助,如有咨询可加我微信,添加时请备注个人介绍,并描述什么问题,否则可能会有添加不成功的情况,如果对你有帮助,请关注下老汉的微笑公众号,会分享一些开发工作中遇到的问题和程序员的额生活,谢谢!

 

qi_dabin
个人微信:qi_dabin
老汉的微笑

 

Logo

前往低代码交流专区

更多推荐