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()が呼び出されても、操作ができないとセキュリティ的にも、ユーザビリティ的にも問題があるからです。
この変更によって、意図しないイベントの順序変更が発生していました。従来は、
keydownkeypresschange
だったのですが、変更後は他のWindowsのブラウザと同じく、
keydownchangekeypress
となっていました。WibKit/BlinkのMac版では、前者の順序というあたりが話がややこしいのですが。
それはさておき、<select>要素のドロップダウンをキーで閉じる、という操作を行った場合に、ユーザはそれ以上、何らかのアクションが発生するとは、考えていないはずです。ですので、ドロップダウンが閉じられた場合には、シンプルに、keydownイベントのpreventDefault()を呼び出すように変更しました。この方が、IEや、Windows版Blinkに合わせるよりも、従来のGeckoの動作に近く、ユーザの期待にも近いと考えたためです。このため、イベントの発生は以下のように変わっています。
keydownchange
つまり、フォーカス移動後の<input>要素で、keypressイベントが発生しなくなっています。