项目中得需求:给页面某个按钮绑定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:知识点:如何获取当前焦点所在得元素