展开目录
bootstrap modal弹框导致ie无法获取焦点
bootstrapbugie
X
陈尼玛的博客
记录开发生涯的踩坑经历,用时间来验证成长
加载中

之前找了网上一个办法,去掉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里,然后给它增加焦点,由于这个输入框的位置肯定是在屏幕可见区内,并且可见,所以可以获取焦点,并且也不会重置滚动条位置。

相关文档

暂无

随便看看

  1. windows电脑防止自动休眠

  2. word文件命令行打印

  3. nginx 子域名对应文件夹

  4. pip安装nltk临时使用国内源

  5. css3 文字渐变色

  6. 搜索命令整理

  7. 判断变量是否 0 或者 '0'

  8. heroku查看app使用时间

  9. heroku登陆cli

  10. 模拟307跳转情况

  11. 树莓派 3B/3B+ usb启动

  12. 单页应用的单向数据流的流程图

  13. TIME_WAIT过多

  14. ssl 证书生成方式

  15. 猴子选大王算法问题

  16. centos7 开放或者关闭端口

  17. youku电脑版跳过广告代码

畅言模块加载中