FirefoxOS on jQuery で .keypress() とか onKyedown属性によるイベントハンドルが何故か利かない件について

題名がやたら長くなるほどクソみたいな問題だ。割と由々しき問題で、結論から言うと window.onkeypress を使うことになった。

※オレだけかもしれん。Firefox OS 1.3 シミュレータ上での話です。

問題としては jQuery セレクタによる指定が class あるいは抽象的な指定の場合、即ちNOT id属性値の場合に再現する(みたい)。例えば以下のコード;

<p class="unko"><input onkeydown="_sayKeydown(e)"></p>
$(".unko input").keypress( function(e){
    console.log("fuck");
});

この場合、unko class属性値が付与された要素内inputそれぞれの中でkeypressしても無反応であった。ちなみに.keypress()じゃなくて.keydown()にしても同じく無反応ね。

じゃあjQueryがいけんのではということで、input要素へonKeydown属性値で_sayKeydown()を起動してみよう;

function _sayKeydown( e ){
    console.log(e);
}

まあ出てこないです。

もしかして、keyイベント系って自明なthisじゃないとダメなん?うーんjsの基礎が成ってないのが露呈してしまったか???しかし基礎なんてドウでもよくて、結局以下で解決した。

window.onkeypress = keypress;
function keypress(e){
    var say_id = e.target.id; // そいつのid属性値
    var say_val = e.target.value; // そいつのvalue属性値
    if( e.which === 13 ){
        // enter押された時の動作
    }
}

Stock overflowを参考にした。

もっとスマートな方法はあるんだべか。おら馬鹿だからよくわからん。