2016-08-08 14 views
0

私はすでにdocument.activeElement.idを使用して解決した奇妙な問題に遭遇しましたが、$('#id').is(':focus')を使用すると常にfalseを返すようです。私のコンソールで.is(focus)vs .activeElement?

は、私は以下をテスト...

> document.activeElement 
<input type="text" for="zoomSlider" id="zoomText" oninput="zoomSliderUpdate(value)" value="100"> 

> $('#zoomText') 
<input type="text" for="zoomSlider" id="zoomText" oninput="zoomSliderUpdate(value)" value="100"> 

> $('#zoomText').is(':focus') 
false 

> document.activeElement // to check if focus was lost somehow 
<input type="text" for="zoomSlider" id="zoomText" oninput="zoomSliderUpdate(value)" value="100"> 

なぜis(':focus')は偽を返すのですか?

+1

あなたはZoomTextの目の前に#を残しました。 jqueryのidで要素を検索している場合は、$( '#zoomText')の前に#を付ける必要があります。 – Justin

+0

この問題に関する記事はjQueryバージョンに関連しています。私はそれがあなたのシナリオだとは限りませんが、手掛かりになるかもしれません。 http://stackoverflow.com/questions/16956906/focus-selector-not-work –

+0

私はこのノードプロジェクトのためにjQuery 2.2.xを使用しています。 –

答えて

1

まず、コードにバグがあります。 $('#zoomText').is(':focus')である必要があります。

第2に、カーソルが内部にある場合にのみ、要素にフォーカスが当てられます。カーソルがJavaScriptコンソールにある場合は、フォーカスがあり、入力がぼやけています(フォーカスがずれています)。

JavaScriptコンソールでこれを試してから、カーソルをすぐに入力に戻してください。 3秒後、「true」または「false」がコンソールに表示され、「zoomText」要素のフォーカス状態を示します。

setTimeout(function() { console.log(jQuery('#zoomText').is(':focus')); }, 3000)

+0

あなたは正しくタイプミスをしていますが、正しくコンソールに書き込まれています。では、なぜjqueryはコンソールではなく、バニラJSがフォーカスを認識するのですか? 'document.activeElement.id'は' zoomText'をまだ登録していますが、そうではありませんか?彼らは 'フォーカス'または 'アクティブ'として登録する別の手がかりを探していますか? –

+1

'document.activeElement'と擬似的に選択された' ':focus'"要素はまったく同じものではありません。ブラウザは、コンソール、他のタブ、または他のウィンドウとの間でスイッチを切り替えるときに、目に見えるフォーカスが要素に入り、要素から離れるときに、「フォーカス」および「ブラー」イベントを発生させます。しかし、ブラウザは文書の「活発な焦点」の状態を維持し、どの要素がフォーカスされているかを覚えて、必要なときに目に見えるフォーカスを復元します。 –

+0

ここでフォーカス/ブラーイベントを実際に見たい場合は、これをコンソールにコピーし、テスト対象としてコメントボックスを使用してください: 'jQuery( '[name =" comment "]')。on( フォーカスを変更すると、明示的にフォーカスが移動しますが、フォーカスを変更すると、フォーカスが変更されます(フォーカスが変更されると、フォーカスが変更されます)。あなたはこのタブ/ウィンドウに戻ったときに "フォーカス"を発します。しかし、 'document.activeElement'は全時間同じままです。 –