javascript - HTML:如何防止从元素移动焦点?

标签 javascript html

我有几个具有 tabindex 属性的元素。当我点击它们之外的页面任何区域时,它们就会失去焦点。

当前行为 - 在常规桌面应用程序中,如果某个元素不可聚焦,则单击它不会将焦点从先前聚焦的元素上移开。

但在 HTML 中情况并非如此:我的可聚焦元素总是失去焦点,即使我单击没有 tabindex 的元素也是如此。

必需的行为 - 是否可以在 HTML 中阻止上述行为?我希望我的元素仅在我单击其他可聚焦元素时失去焦点,例如我上面提到的它在桌面应用程序中的元素。

最佳答案

这是一种 hack,可以用更好的方式实现。

逻辑

  • 创建一个全局变量 lastSelectedInput 来存储上次访问的元素的 id
  • 添加一个类来定义边界。
  • 在body上添加点击事件,如果event.path不包含边界元素,调用lastSelectedInput的焦点>

JSFiddle

代码

(function() {
  var lastSelectedInput = "";

  function bodyClick(e) {
    var inside = false;
    for (var i in e.path) {
      if (e.path[i].className == "content") inside = true;
    }
    if (!inside) {
      document.getElementById(lastSelectedInput).focus();
    }
  }

  function inputFocus(e) {
    lastSelectedInput = e.target.id;
    e.stopPropagation()
  }

  function registerEvents() {
    document.getElementsByTagName("body")[0].addEventListener("click", bodyClick);

    var inputs = document.getElementsByTagName("input")
    for (var i = 0; i < inputs.length; i++) {
      inputs[i].onfocus = inputFocus;
    }
  }

  registerEvents();
})();
.content {
  margin: 15px;
  background: #ddd;
  border: 2px solid gray;
  border-radius: 4px;
  height: 200px;
  width: 200px;
  padding: 5px;
}
<div>
  <div class="content">
    <input type="text" id="txt1">
    <input type="text" id="txt2">
    <input type="text" id="txt3">
    <input type="text" id="txt4">
    <input type="text" id="txt5">
  </div>
</div>

关于javascript - HTML:如何防止从元素移动焦点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33955562/

相关文章:

javascript - 用数字填充数组

html - 溢出?随着容器尺寸变大,元素被推出

php - 输入值可以与 HTML 表单中的占位符相同吗?

javascript - 从 javascript 中的文本字段中删除属性

html - 如何在标签下方水平对齐单选按钮

javascript - 从最新的 append() 调用中获取元素

javascript - 迭代数组并向每个数组添加谷歌地图事件?

javascript - window.onload 不适用于 Google Chart API

javascript - 使用下划线模板在backbone.js中渲染

html - 寻找一个正则表达式来匹配背景图片url中的所有情况