javascript - 模态关闭后返回焦点

标签 javascript jquery modal-dialog focus

我正在使用Venobox modal并需要 ADA 支持。我已经调整了一些东西以使其正常工作,但我还需要一件。我需要集中注意力返回到按下关闭按钮时打开模式的元素 a.venobox

换句话说,如果用户仅通过 Tab 键浏览网站,打开模式,然后关闭它,然后再次按 Tab 键,它将从他们离开的地方继续。

我尝试插入 tabindex 但它仅适用于第一个选项卡,然后跳回页面顶部。然后,我尝试添加一些东西来保持焦点,然后在关闭时返回它,但我不是最擅长 js 的。

谢谢

我当前的代码:

$(document).ready(function(){
  $('.venobox').venobox().click(function() {    
    $('.vbox-close').attr('tabindex', '1').attr('title','Close Modal');

    var focusReturn = $(this).focus();    
    $(".vbox-close").click(function(){
      return focusReturn;
    });

  });
});

最佳答案

设置var focusReturn = $(this).focus();只会将您的自定义变量设置为焦点函数的返回值(which is the element it was called on) 。此外,the return value in an event handler is only used to prevent default event propagation.

您可能想要做的是 var focusReturn = $(this).focus;,然后在 click- 内使用 focusReturn(); 调用它处理程序。但是,我建议不要这样做,因为它是解决非功能性问题的功能性方法。而且用 JavaScript 等非函数式语言编写函数式代码很难阅读。

但是,有一种更常见(也更符合常识)的方法可以做到这一点:

// don't need this line // var focusReturn = $(this).focus();    
$(".vbox-close").click($.proxy(function() {
  $(this).focus();
}, this));

jQuery's proxy function用于更改函数执行的闭包上下文。

(可能)改进此问题的另一种方法是将该事件处理程序放置在 .vbox-close 上的 close 事件上,但我对此不够熟悉插件以了解它支持哪些事件。不过,这当然值得研究,因为对话框可能可以通过更多方式关闭,而不仅仅是单击关闭按钮。

关于javascript - 模态关闭后返回焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24294992/

相关文章:

javascript - 使用包括脚本的长 block 动态更改 div 的源/内容

javascript - 如何捕获 Firefox 中未保存更改的 "Stay on Page"按钮?

javascript - 如何制作具有不同内容的模态

javascript - jQuery 单击隐藏所有模态框

javascript - JSLint错误: "Expected a newline at EOF",与Beautify插件冲突

javascript - 使用 jQuery AJAX 下载二进制文件

javascript - 嵌套的、依赖的回调函数

javascript - 使用 Javascript 将数组项相乘

javascript - 使可切换内容占据剩余高度

php - 将提交按钮的格式应用于 CakePHP 中的普通按钮