この日記はMozillaのプロダクトへの貢献者としての私の成果を中心に、気になったバグやWeb界隈の話題について書いていますが、 断り書きがある場合を除き、いかなる団体のオフィシャルな見解ではありません。あくまでも個人的なものです。 Mozilla Foundation、Mozilla Corporation、及び関連企業の公式情報ではないことに注意してください。

現在、XHTML 1.0 (もどき)から、HTML5なコンテンツに修正中です。古い日記は修正が完了していませんので表示が崩れます。 順次、修正していく予定ですのでしばらくお待ちください。

もずはっく日記(2010年9月)

2010年9月4日

Bug-org 590819 Click event isn't fired when mouse button down on border of <input> and mouse button up on padding box of it
初回投稿日時: 2010年09月04日11時44分05秒
最終更新日時: 2010年09月04日11時46分23秒
カテゴリ: Javascript Mozilla Core バグ修正
SNS: (list)

<input><textarea>border上でマウスのボタンを押し、そのままマウスカーソルを動かしてborderより内側でボタンを離した場合に、クリックイベントが発生しない、というバグです。

もともと、Bug-org 552707の修正中にまったく関係無い自動テストがMacでのみ、通らなくなってしまう、ということから偶然発見したバグです。Macでのみ、たまたま生成されたmousedownイベントがborder上で発生していたため、新しいロジックでは問題が出ていたのでした。

Geckoの<input><textarea>は、単にinline-blockを生成していて、これがborderを生成します。そして、その内部に匿名のdiv要素を作り、これをエディタのルート要素とし、エディタの内容をこのdiv要素の下に匿名のテキストノードとしてぶら下げていきます。

clickイベントは同じ要素上でmousedownイベントと、mouseupイベントの両方が発生した場合に生成されるイベントですが、これが、input要素で発生した後、匿名div要素で発生した、と判断され、clickイベントが生成されていませんでした。

今回の修正により、mouseup時の要素が匿名の要素だった場合、その匿名サブツリーの親とも比較して判断するようになっています。

関連するかもしれないエントリ

bug-org 590819を含むエントリ