Bug-org 903715 Using keyboard to select value in <select> with enter key ends up submitting form when it didn't use to
初回投稿日時: 2013-08-31 11:42:28
カテゴリ: Events Mozilla Core Mozilla25 Mozilla26 バグ修正
SNS:
Tweet (list)
Bug-org 501496の修正によるregressionで、<select>
要素でドロップダウンを開いている時に、Enterキーで閉じた際、change
イベントのハンドラで、<input>
にフォーカスを移動させると、その<input>
要素上でkeypress
イベントが発生し、これがフォームを送信してしまう、というバグです。
25以降では、Geckoでも、DOM keydown
イベントで、preventDefault()
を呼び出すと、keypress
イベントは発生しなくなりました。このため、元のバグで、<select>
要素の操作を、keypress
イベントから、keydown
イベントにタイミング変更を行いました。これは、keydown
イベントでpreventDefault()
が呼び出されても、操作ができないとセキュリティ的にも、ユーザビリティ的にも問題があるからです。
この変更によって、意図しないイベントの順序変更が発生していました。従来は、
keydown
keypress
change
だったのですが、変更後は他のWindowsのブラウザと同じく、
keydown
change
keypress
となっていました。WibKit/BlinkのMac版では、前者の順序というあたりが話がややこしいのですが。
それはさておき、<select>
要素のドロップダウンをキーで閉じる、という操作を行った場合に、ユーザはそれ以上、何らかのアクションが発生するとは、考えていないはずです。ですので、ドロップダウンが閉じられた場合には、シンプルに、keydown
イベントのpreventDefault()
を呼び出すように変更しました。この方が、IEや、Windows版Blinkに合わせるよりも、従来のGeckoの動作に近く、ユーザの期待にも近いと考えたためです。このため、イベントの発生は以下のように変わっています。
keydown
change
つまり、フォーカス移動後の<input>
要素で、keypress
イベントが発生しなくなっています。