2011-09-12 16 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でテストされたwotkignの答えを反映するために上記のコードを修正しました。私はテストする他のIEを持っていません。

+0

これは、エラー:エラー:プロパティ 'attachEvent'の値を取得できません:オブジェクトIEでは – Jules

+0

がヌルか定義されていません - より安全でなければならない '!= 'undefined''を追加しました –

+0

Andrewはそうです、私はちょうど同じことを実現しました:) –