MozillaZine.jp フォーラム
https://forums.mozillazine.jp/

element.blur - form部品のフォーカスを外すの挙動について
https://forums.mozillazine.jp/viewtopic.php?f=2&t=14168
ページ 11

作成者:  tuneoogawa [ 2013年7月07日(日) 03:57 ]
記事の件名:  element.blur - form部品のフォーカスを外すの挙動について

他の方のHPを見て、blur の動作を確認したところ、chrome及びIE10の挙動と異なります。

カーソルがフォーカスされている|の点滅が消えません。位置が少しずれて点滅します。

これがfirefoxの仕様なのか、お教え願います。

http://javascriptist.net/ref/element.blur.sample.html#

Firefox 22.0 , chrome バージョン 27 ,IE10

作成者:  偶然的通行人 [ 2013年7月07日(日) 10:20 ]
記事の件名:  Re: element.blur - form部品のフォーカスを外すの挙動について

もし、キャレットブラウズモードで Firefox を使っておられるなら、通常モードに切り替えて試してみてください。

キャレットブラウズモードの場合、名前の通りそれが可能である限りはコンテンツエリア内でキャレット(I ビーム)が表示され続けますから......。

ただ、「位置が少しずれて」というのはよくわかりません。まあ、ずれる動作が意図された "仕様" ってことはないと思いますけど。

とりあえず文面から気になった点だけです。的外れだったらすみません。

当方、JavaScript の知識はないに等しいので、それについては他の詳しい方からのアドバイスを待ってみてください。

作成者:  tuneoogawa [ 2013年7月07日(日) 10:30 ]
記事の件名:  Re: element.blur - form部品のフォーカスを外すの挙動について

回答ありがとうございます。

指摘いただきました個所を確認しました。

オプション - 一般 - アクセシビリティ - ページ中の移動にカーソルを使用する(キャレットブラウズモード)(C)

のチェックボックスにチェックは入っていません。

OSはWindows7 Service Pack 1です。
宜しくお願いします。

作成者:  通行人 [ 2013年7月07日(日) 18:15 ]
記事の件名:  Re: element.blur - form部品のフォーカスを外すの挙動について

javascriptist.net/ref/element.blur.sample.htmlですが、
<input type="text" name="name" id="name">
function doblur() { var element = document.getElementById("name"); element.blur(); }
<a href="#" onclick="doblur()">カーソルを取る</a> となっています。


このリンクをクリックすると、
(1) クリックによってフォーカスがリンクに移動し、
(2) onclick="doblur()"のelement.blur()によって、<input>からフォーカスがはずされ、
(3) <a href="#">のよって、#というアンカーへの移動、
が発生します。
(2)でelement.blur()によって外れたフォーカスがどこに移動するかについては、「inputにフォーカスがある状態ではなくなる」以外には、なんら規定されておらず、
(3)でも、存在しないアンカーに移動しようとした時にどこに移動するかは、既定されていません。
従って、上記のようなケースでは、
element.blur()によって<input>からフォーカスがはずされた後、<a href="#">によってページの先頭に移動し、先頭にある<input>にフォーカスされる、というようなことが起こり得ます。
これらは、全て実装次第です。

テストページにおいて、<input>のフォーカスは、フォームの外側をクリックすれば、自動的に外れます。
この場合でも、カーソルが残ってブリンクし、その上位置が変わるのですか?
テストページのonclick="doblur()"は、どのようにして実行させていますか?
マウスクリックですか? タブで移動してEnter、ですか?

作成者:  tuneoogawa [ 2013年7月07日(日) 22:38 ]
記事の件名:  Re: element.blur - form部品のフォーカスを外すの挙動について

回答ありがとうございます。

最初の確認した時は、テストページのonclick="doblur()"は、マウスクリックです。

テストページにおいて、<input>のフォーカスは、フォームの外側をクリック後、少し下に(1-3pxずれて)カーソルが残ってブリンクしていました。

現在は、この現象は発生していません。また、現象を再現するために時間を取りましたが、現象を再現するまでに至っておりません。

ブラウザの状態がおかしくなっていたのだと思います。

仕様の説明をいただいた中に、
(2)でelement.blur()によって外れたフォーカスがどこに移動するかについては、「inputにフォーカスがある状態ではなくなる」以外には、なんら規定されておらず、
(3)でも、存在しないアンカーに移動しようとした時にどこに移動するかは、既定されていません。

ブラウザの状態がいつも正常とは限らないので、「inputにフォーカスがある状態ではなくなる」先の状態が規定される、
または存在しないアンカーに移動しようとした時どこに移動するか規定できる
のが、ブラウザの状態がおかしくなってもアプリケーションから見れば正常に動くよう、アプリケーションを作れる仕様の方が良いのではないかということです。

作成者:  通行人 [ 2013年7月08日(月) 03:22 ]
記事の件名:  Re: element.blur - form部品のフォーカスを外すの挙動について

tuneoogawa さんが書きました:
テストページにおいて、<input>のフォーカスは、フォームの外側をクリック後、少し下に(1-3pxずれて)カーソルが残ってブリンクしていました。
それならば、element.blur()の仕様云々は、一切関係ない話ですよね。
単に、Fxのバグとかアドオンのバグとかでおかしくなった、というような類の話。
Firefoxの-safe-modeでの確認(アドオンがDisabledの状態で起動される)などは、なさっていますか?
Iビームポインターのアイコンは、大抵マウスの設定にあるのですが、別のアイコンに変えてみるとかすると、状況が変化しますか?


tuneoogawa さんが書きました:
ブラウザの状態がいつも正常とは限らないので、「inputにフォーカスがある状態ではなくなる」先の状態が規定される、
または存在しないアンカーに移動しようとした時どこに移動するか規定できるのが、
ブラウザの状態がおかしくなってもアプリケーションから見れば正常に動くよう、アプリケーションを作れる仕様の方が良いのではないかということです。
何のどの「仕様」なのでしょう?「正常とは限らないブラウザーの状態」のために、一体どのような「仕様」を定義できるというのでしょう?

「存在しないアンカーに移動」というリンクの挙動に関しては、HTMLの仕様であって、ブラウザーが勝手に既定できるものではありません。
そして、「存在し得ないアンカー(アンカー名なし)に移動しようとするリンク」は、単に、HTMLを書いた人による「HTMLの文法違反」です。
HTML5になってエラー処理も規定するようになったから、今はどうなのか知りませんけど。

element.blur()で<input>からフォーカスを外した後、余計なイベントを発生させているのは、<a href="存在しないアンカー" onClick="element.blur();">というHTMLを書いた人です。
HTMLの要素のクリックでonClickでJavaScriptコードを実行させたいだけならば、return falseで<a href>の正規の挙動を停めるとか、<button onClick>ボタン名</buton>とかを使えばいい話。

昔からのHTML本には、<a href="#" onClick="JavaScriptコード;">、つまり、<a href="存在し得ないアンカーの相対指定のURL" onClick="JavaScriptコード";>が良く書いてあるのですが、IEだとページの先頭に移動するが、NetScapeやMozillaだとページの位置を移動しない、という現象に、良く泣かされた...
IEと違うからMozillaのバグだ!、というバグを開く前に、<a href>はリンクであって"#"は相対指定のURLでアンカー名の指定なし、だとちゃんと理解し、文法違反のないHTMLを書いて欲しい...

作成者:  tuneoogawa [ 2013年7月08日(月) 07:20 ]
記事の件名:  Re: element.blur - form部品のフォーカスを外すの挙動について

回答ありがとうございます。

問題は解決しました。現象が再現できなかったので、ブラウザの状態がおかしくと表現しましたが、誤りで正常な状態です。

つまり、偶然通行人さんがご指摘の通りキャレットブラウズモードになっていたようです。

たぶん、いろいろやっているうちにF7を押したのですが、キャレットブラウズモードから戻るときに何もメッセージが出ないので気づかずにいて

ご指摘を確認する際のオプションを確認した時には、すでにチェックが外れていたようです。

このため、http://javascriptist.net/ref/element.blur.sample.html#
のページでキャレットブラウズモードにして、<input>の下とアンカーの上の間の何もないところを一度クリックしたのち
に'カーソルを取る'のアンカーをクリックすると、現象は再現できました。

IEでキャレットブラウズモードにして同じ操作をすると、クリックする位置でカーソルの位置は異なりますが、この方が私には、誤解のない動きのように見えます。

論点を戻しますと、バグだとは考えていませんので、仕様でしょうかという質問でした。

また勝手な考えかと思いますが、F7を押してキャレットブラウズモードに変わる仕様は、F7を押したときのタブのみ有効というのが良いのかもしれません。

ページ 11 All times are UTC + 9 hours
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/