【问题标题】:Javascript, detect if the textbox has focus?Javascript,检测文本框是否有焦点?
【发布时间】:2011-09-12 22:26:42
【问题描述】:

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

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添加文本之前的检查。

【问题讨论】:

标签: javascript internet-explorer firefox cross-browser


【解决方案1】:

让我吃惊的是,您可以使用事件侦听器来设置变量。唯一的问题是 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>

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

edit2 我的 IE 代码有误。发现你没有在'undefined' 周围加上引号我已经修复了上面的代码以反映在 Firefox、chrome 和 IE6 中经过测试和 wotkign 的答案。我没有要测试的任何其他 IE。

【讨论】:

  • 这会导致错误错误:无法获取属性“attachEvent”的值:对象为空或未定义,在 IE 中
  • 抱歉 - 我添加了 != 'undefined' 应该更安全
  • 代码应该放在哪里?我在 testFocus 中尝试过,但它总是将 ChatHasFocus 返回为 false。
  • 试着把它放在“测试焦点”下面 ChatHasFocus 本质上是一个全局布尔值,这两个事件发生然后你点击聊天框并再次点击关闭。当您加载页面时,这一切都会“自动”发生。它不是 testFocus 函数的一部分。
  • 我收到一个新错误无法获取属性“addEventListener”的值:对象为空或未定义。我试过没有,RE你是第二个例子,但这没有用要么。
猜你喜欢
  • 2013-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-15
  • 1970-01-01
相关资源
最近更新 更多