• ベストアンサー

onBlurとonFocusの処理順序について

テキストボックスが2つあり(AとBとします)、 AにはonBlur時に、BにはonFocus時に処理を行うようにしています(実行処理はそれぞれ別物)。 この状態でAからBにカーソルを移すと、 BのonFocus処理を行い、その後AのonBlur処理を行ってしまいます。 AのonBlur→BのonFocusという順番で処理をしたいのですが、これは可能なのでしょうか? また、イベントハンドラの発生順序(処理順序?)には決まりがあるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • A__
  • ベストアンサー率47% (22/46)
回答No.1

<input id=a onBlur=alert("aB")> <input id=b onFocus=alert("bF")> ↑のソースだと、a から b にカーソルを移すと alert("aB") → alert("bF") となりました。 puntoabartさんはもっと複雑な処理をさせていて、 その中で逆になってしまっているんだと思います。 たぶん思いどうりにできますよ。

puntoabart
質問者

補足

確かに、onBlur処理はforやifがたくさん入った複雑なものになっています。 ところで、複数のイベントハンドラの処理は並行して行っているのでしょうか? もし、並行して行っているならonBlur開始→onFocus開始となり、 処理が複雑なonBlurが終わる前にonFocusが終わってしまうのかもしれません。

その他の回答 (1)

  • A__
  • ベストアンサー率47% (22/46)
回答No.2

処理が並行して行う という部分が分かりませんでした。 onBlurが終わる前にonFocusが終わってしまう という部分も 分かりませんでした。

puntoabart
質問者

補足

変なたとえかもしれませんが、「ご飯を食べる」という行動と「新聞を読む」という行動を考えてみましょう。 処理を並行して行う、というのは 「ご飯を食べながら新聞を読む」イメージです(行儀は悪いですが)。 余談ですが、並行に対する概念として「連続」という処理方法もあります。 これは、「ご飯を食べ終わってから新聞を読む」というイメージです。 『onBlurが終わる前に~』については、 「onBlur処理が完了する前にonFocus処理が完了する」 ときっちりと書けばよかったかもしれません。 ご飯と新聞のたとえで言うと、 「ご飯を食べている途中で新聞を読み始め、先に新聞を読み終えてしまう」といったところです。

関連するQ&A