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

时间:2011-09-12 13:25:22

标签: 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添加文本之前,该函数用作检查。

1 个答案:

答案 0 :(得分:0)

让我觉得您可以使用事件监听器来设置变量。唯一的问题是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'周围加上引号我已修复上面的代码,以反映在Firefox,Chrome和IE6中经过测试和验证的答案。我没有任何其他IE可以测试。