之前找了网上一个办法,去掉modal弹框的tabindex="-1"
属性,但没有任何效果,ie8上依然不能获取焦点,今天偶然发现了一个新的办法,即调用弹出框内的某个输入框的focus()
方法,之后就可以恢复正常。
代码如下:
// 全局事件,弹出框显示后,立即获取焦点
$(document).on('shown.bs.modal','.modal.fade',function(){
$(this).find('input,textarea').focus()
})
但是,这样做并没有结束,有多层弹框同时出现时,这样做仅确保了第一个弹框正常出现,但同时出现两个时,顶层的关闭之后,第一个弹框已然失去了焦点,所以改进之后变成了这样的:
'shown.bs.modal,hidden.bs.modal'.split(',').map((b)=>$(document).on(b,'.modal.fade',function(){
$('.modal.fade.in').last().find('input,textarea').first().focus()
}))
以上代码会导致滚动条重置到被focus的输入框位置,因此后来我又做了一步改良如下
'shown.bs.modal,hidden.bs.modal'.split(',').map((b)=>$(document).on(b,'.modal.fade',function(){
// $('.modal.fade.in').last().find('input,textarea').first().focus()
let mf=$('.modal.fade.in').last()
let od=mf.find('input[data-fix-modal]')
let h=od.length?od:$('<input data-fix-modal style="position:fixed;left:0;top:0;z-index:99;width:0;height:0;">').appendTo(mf)
h.css('opacity', 0)
h.focus()
}))
改动为:添加一个可见但长宽为0的输入框
到modal里,然后给它增加焦点,由于这个输入框的位置肯定是在屏幕可见区内,并且可见,所以可以获取焦点,并且也不会重置滚动条位置。
相关文档
暂无
随便看看
畅言模块加载中