2011-09-12 29 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

安德魯是對的,我剛剛意識到同樣的:) –