
No.5ベストアンサー
- 回答日時:
http://dev.w3.org/html5/spec/sections.html#the-b …
HTML5の方を読むと、
『window.onfocusはHTMLタグとして書けないから、<body onfocus="">で書いてちょ。ブラウザはwindowに置き換えてちょ。』
ということのようですね。
HTMLとJavaScriptの関係では、document.body.onfocusは<body onfocus="">と同等なのでwindowにマッピングされるのかもしれませんが、
addEventListenerによるイベントリスナーの登録は別物なので、
文字通り<body>にフォーカスが当たらなければonfocusイベントが呼び出されないと思います。
jQueryは全面的にaddEventListener/attachEventを使っていると思いますので、
jQueryを使うと、結果的にbodyに登録されたイベントリスナーが呼び出されなくなると思います。
デフォルトでフォーカスが当たる要素は下のページにあるように<a>や<input>などです。
<body>にフォーカスを当てる方法としてNo.3とおりtabindexが使えるようです。
http://dev.w3.org/html5/spec/editing.html#specia …
>An element is specially focusable if the tabindex attribute's definition above defines the element to be focusable.
HTML5の方を読むと、
『window.onfocusはHTMLタグとして書けないから、<body onfocus="">で書いてちょ。ブラウザはwindowに置き換えてちょ。』
ということのようですね。
HTMLとJavaScriptの関係では、document.body.onfocusは<body onfocus="">と同等なのでwindowにマッピングされるのかもしれませんが、
addEventListenerによるイベントリスナーの登録は別物なので、
文字通り<body>にフォーカスが当たらなければonfocusイベントが呼び出されないと思います。
jQueryは全面的にaddEventListener/attachEventを使っていると思いますので、
jQueryを使うと、結果的にbodyに登録されたイベントリスナーが呼び出されなくなると思います。
デフォルトでフォーカスが当たる要素は下のページにあるように<a>や<input>などです。
<body>にフォーカスを当てる方法としてNo.3とおりtabindexが使えるようです。
http://dev.w3.org/html5/spec/editing.html#specia …
>An element is specially focusable if the tabindex attribute's definition above defines the element to be focusable.
No.4
- 回答日時:
ごめんなさい、寝ぼけてすごく的外れなことを書きました。
No.3 は全面撤回します。jQuery に問題はなく、No.2 が正しいです。body は(そのままでは)キーボードフォーカスの対象になりませんので、body で focus を監視してもイベントリスナに通知されません。body でキーボードフォーカスを拾えるようにするには <body tabindex="0"> のように 0 以上の tabindex を付加します。
しかし、それはウィンドウ全体のフォーカスではありません。もしウィンドウのフォーカスを拾いたければ、No.2 が仰るように window を監視します。
失礼しました。
No.3
- 回答日時:
jQuery 1.6.1 を追跡すれば分かりますが、本来内部的に
document.addEventListener('focus', handler, true); // キャプチャリング
document.attachEvent('onfocusin', handler); // イベント名は "focusin"
のように修正されるべき所がスルーされて、"focus" のバブリングのまま登録されているからです。修正コードは jQuery に含まれているはずですが、それが実行されないバグなのか、何か他の手順が必要なのか、jQuery のリファレンスないしバグトラッカーなどで確認して下さい(私は追いかける気はないので)。
---
なお、body の onfocus は DOM3 Events および HTML5 に収録されています。この部分は主要ブラウザ間の仕様調整にもとづく後づけ規定なので、今のブラウザでも動くと考えて構いません。
それと、言うまでもありませんが一応。body(もしくは window)の focus イベントで alert() すると無限ループになる可能性があるので、十分注意して下さい。
No.2
- 回答日時:
http://www.w3.org/TR/html4/interact/scripts.html …
<body onfocus="">はHTMLやDOMとして定義されていませんので、ブラウザ依存になるはずです。
window.onfocus、window.onloadなどで処理した方が確実だと思います。
<body onfocus="">はHTMLやDOMとして定義されていませんので、ブラウザ依存になるはずです。
window.onfocus、window.onloadなどで処理した方が確実だと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
オブジェクト配列の各メンバを...
-
Outlookのアカウントがあるとメ...
-
スマホ上で、左右スワイプで次...
-
タグを教えてください。
-
ラジオボタンを複数選択したと...
-
jsで質問です。 formをsubmitし...
-
2025年相性がいい人のサイトの...
-
CookieをWebStoeageに変える
-
Adobe acrobat proでフォームを...
-
jqueryのselect2で検索欄の文字...
-
<tr>指定した表の行要素をボ...
-
食材の期限を管理するためにGAS...
-
ビデオのJSについて
-
鍵盤アプリで、スマホの画面に...
-
<div>のタッチ状態を維持したま...
-
jQueryでシンセサイザーを作っ...
-
プログラミング 学習
-
HTMLでサブフレームから親のス...
-
ジャバスクリプトについて。
-
プログラムについて。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ボタンのID名を取得するには?
-
SCRIPT5007: 未定義または NULL...
-
JavaScriptでiframeの内容を「...
-
フォーカス移動抑止について
-
初心者javascript ウィンドウサ...
-
クリックすると別の文章を表示する
-
キーを押している間の時間を計...
-
JavaScriptからローカルにテキ...
-
ボタンを押してテキストエリア...
-
js doctype宣言を打つとプログ...
-
js プロトタイプ
-
ジャバスプリクトの質問
-
3の倍数の合計
-
「オブジェクトを指定してくだ...
-
Ajax:FireFoxだと動作しない
-
function の return 値を表示し...
-
iframeの中から親ページをスム...
-
【jquery】EasyUIのSubGridにMy...
-
jQuery 書き換えた文字列の内部...
-
リンクをクリックしてページの...
おすすめ情報