vue之在页面中监听键盘的Enter键来触发某个按钮事件
项目中得需求:给页面某个按钮绑定Enter键,但是按钮不在form中,直接给按钮绑定后此按钮只有获取了焦点按键才会触发,显然,一直保持按钮获取焦点是不现实得。所以通过查询等,结合项目需求,完成了下面得代码,希望对大家有用,欢迎一起探讨,Email:qi_dabin@163.com首先,一直在想怎样能够不管焦点在本页面得那里,点击Enter键得时候都能够触发按钮事件,然后开始想。。。。本项目...
项目中得需求:给页面某个按钮绑定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:知识点:如何获取当前焦点所在得元素
一个编程路上的小菜鸟,希望文章对大家有所帮助,如有咨询可加我微信,添加时请备注个人介绍,并描述什么问题,否则可能会有添加不成功的情况,如果对你有帮助,请关注下老汉的微笑公众号,会分享一些开发工作中遇到的问题和程序员的额生活,谢谢!
更多推荐
所有评论(0)