safariにおけるonkeydownの発動時間
こんなスクリプトがあったとします。(都合上onsubmitは使えない状況で。)
<script type="text/javascript"> //require prototype.js 1.5 // function safeenter(){ Event.observe($('text'), 'focus', function(){ Element.observe(window.document, 'keydown', kd = function(event){ if(event.keyCode==13){ Event.stop(event); } }); }); Event.observe($('text'), 'blur', function(){ Element.stopObserving(window.document, 'keydown', kd); }); } Element.observe(window, 'load', function(){ safeenter(); }); </script> <form> <input id="text" type="text"> <input type="submit"> </form>
このスクリプトの意味は、フォームの中のテキストボックスにフォーカスがあるときは、
Enterキーによってフォームが発動されるのを防ぎ、
フォーカスが外れれば、Enterキーでもフォームが発動する、という事です。
しかし、safariでは、上記スクリプトは上手く動作しません。
何故ならsafariの場合、
←遅い 早い→
onkeydown form onkeypress
という順番だからです。
IEとかであれば
←遅い 早い→
form onkeydown onkeypress
なんですが・・・。
なので、
Element.observe(window.document, 'keypress', kd = function(event){
とすればいいのか、と言うとそうでもありません。
prototype.jsの2264行目あたりを見て下さい。
prototype.jsは勝手にsafariの場合にonkeypressをonkeydownに変更しています。
謎です。(汗
非常に困ってしまった為、この部分を取り除きました。
誰か、何故safariでonkeypressをonkeydownに変更しているのか
解る人教えて下さい・・・・。