題名がやたら長くなるほどクソみたいな問題だ。割と由々しき問題で、結論から言うと 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押された時の動作 } }
もっとスマートな方法はあるんだべか。おら馬鹿だからよくわからん。