layer.open({
type: 1,
content: 'Where is the love?',
btn: ['确定'],
success: function(layero, index){
this.enterConfirm = function(event){
if(event.keyCode === 13){
$(".layui-layer-btn0").click();
return false; //阻止系统默认回车事件
}
};
$(document).on('keydown', this.enterConfirm); //监听键盘事件
// 点击确定按钮回调事件
$(".layui-layer-btn0").on("click",function() {
console.log("peace and love");
})
},
end: function(){
$(document).off('keydown', this.enterConfirm); //解除键盘事件
}
});
同样的,实现按 Esc 键关闭弹窗也是一样的方法,代码如下所示:
layer.open({
type: 1,
content: 'Where is the love?',
btn: ['确定'],
success: function(layero, index){
this.escQuit = function(event){
if(event.keyCode === 0x1B){
layer.close(index);
console.log("peace and love");
return false; //阻止系统默认回车事件
}
};
$(document).on('keydown', this.escQuit); //监听键盘事件
},
end: function(){
$(document).off('keydown', this.escQuit); //解除键盘事件
}
});
条件:弹窗后不做任何点击操作或者聚焦操作
对于layer.load,弹出后反复按回车,load层将不断刷新,即使设置了自动消失也只有等不按回车键才会生效。
对于layer iframe层有表单就更糟糕了,每按一次回车,iframe表单页面将会被刷新,数据将会丢失。(这是form中存在input按回车会自动以form的method属性方法提交表单,如果你在提交按钮上设定了弹窗事件的话,将会直接提交,并且弹窗也被激发,出现错误)。
这似乎是打开iframe或弹窗后,鼠标的焦点出现了问题,鼠标的焦点还停留在激发窗口的控件上,每按一次回车,相当于反复弹窗,会在屏幕上叠很多层。
测试了一下,当弹窗后,点击弹窗身体的任意部位后(不包括标题),再按回车键就不会出现bug了。
parent.document.onkeydown = function(e){
var ev =parent. document.all ? window.event : e;
if(ev.keyCode==13) {
$('#loginBtn').trigger("click");
return false
}
}
document.onkeydown = function(e){
var ev =document.all ? window.event : e;
if(ev.keyCode==13) {
$('#loginBtn').trigger("click");
return false
}
}
只要把loginBtn换成弹出层的按钮即可