Javascript,检测文本框是否有焦点?

标签 javascript internet-explorer firefox cross-browser

我正在升级脚本以使其跨浏览器。我目前的代码如下。

function testFocus(){   
    var testSelection = document.getElementById('chattext').contentWindow.
                  window.document.selection.createRange().parentElement();

    while (testSelection)
    {
        if (testSelection.id == "chatContent") {
            return true;
        }
        testSelection = testSelection.parentElement;
    }
    return false; 
}

然而,以下代码在现代浏览器中不再有效。目前上面的代码必须选择文本。它只需要检查文本框是否有焦点。该函数用作按钮/javascript 添加文本之前的检查。

最佳答案

令我印象深刻的是,您可以使用事件监听器来设置变量。唯一的问题是 IE 使用 attachEvent(event, callback) 而不是 addEventListner 所以你实际上必须添加代码

<script type="text/javascript">
  var ChatHasFocus = false;
  var ts = document.getElementById('chattext');
  function setFocus()  {ChatHasFocus = true;}
  function setNoFocus(){ChatHasFocus = false;}
  if (ts.addEventListener != undefined) { 
      ts.addEventListener('focus', setFocus, false);
      ts.addEventListener('blur', setNoFocus, false);
  } else if (ts.attachEvent != undefined) {
      ts.attachEvent('onfocus', setFocus);
      ts.attachEvent('onblur', setNoFocus);
  } else {
      ts.onmouseover = setFocus;
      ts.onmouseout = setNoFocus;
  }
</script>

编辑 - 我添加了脚本标签来向您展示它是如何添加到您的文档中的。我已经在 firefox 和 chrome 中测试过,它似乎可以工作,但是将 IE 沙箱放在一起对我来说可能有点困难。我确定我在那里遗漏了一些小东西 - 我会看一看。

edit2 我的 IE 代码有误。原来你没有在 'undefined' 周围加上引号我已经修复了上面的代码以反射(reflect)在 firefox、chrome 和 IE6 中经过测试和 wotkign 的答案。我没有任何其他 IE 可以测试。

关于Javascript,检测文本框是否有焦点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7388616/

相关文章:

javascript - django - 在包含的模板中时 javascript 不工作

javascript - 当拖动到可排序列表中时,jQuery UI Accordion 在 IE7 中不可见

Javascript detachEvent,附加了一个 $.proxy 函数

css - 某些 Font Awesome 图标在 Firefox 中不显示,如何调试?

javascript - XUL Firefox 插件中的 appendChild 中断

firefox - 当站点的 SSL 证书更改时让浏览器通知您

javascript - 匹配开头不带点的数字

javascript - 如何在服务中使用参数+依赖注入(inject)

html - Internet Explorer 和 Windows Phone 无法识别特定主机上的 UTF-8

css - 悬停子菜单在 ie 中不起作用