2011-09-12 30 views
3

我正在升级脚本以使其与浏览器交叉。我现在的代码如下。Javascript,检测文本框是否有焦点?

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添加文本之前,该功能用作检查。

+2

除了_Alex C_的发布,您还可以阅读MDN中的document.activeElement:https://developer.mozilla.org/en/DOM/document。 activeElement和MSDN:http://msdn.microsoft.com/en-us/library/ms533065%28v=vs.85%29.aspx –

回答

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可以测试。

+0

这会导致错误错误:无法获取属性'attachEvent'的值:对象是空的或未定义的,在IE – Jules

+0

对不起 - 我添加了'!='undefined''这应该更安全 –

+0

安德鲁是对的,我刚刚意识到同样的:) –