0

jqueryを使用してENTERキーが押されたことを検出しようとしていますが、どのフォーム要素がイベントをトリガーしたかを知る必要があります。ENTERキーが押されたことを検出するためのコードを見つけましたが、それをトリガーしたフォーム要素のIDを特定できません。

    $(document).keypress(function(e) {
    if( e.which == 13 )
        {
        alert( $(this) );               //This shows an object is accessible
        alert( $(this).attr("id") );    //This displays "undefined". Why? How do I determine the id of the object?
        }
    });
4

3 に答える 3

2

イベント委任を使用すると、次のコードを試すことができます。

$(document).on('keypress', 'input', function(e) {
    if( e.keyCode === 13 ) {
       console.log(this.id);
    }
});

あなたの例では、あなた$(this)documentオブジェクト自体です(イベントをトリガーした要素ではありません)

また、このコードは、すべてのinputフィールドにid属性が定義されている場合に機能することに注意してください(そうでthis.idない場合、一部の要素には定義されません)

于 2012-06-22T13:04:05.753 に答える
0

あなたはこのようにそれを行うことができます

$('form input, form select, form radio').keypress(function(e) {
  if(e.which == 13) {
   $form = $(this).closest('form');
   alert($form.attr('id'))
   console.log($form);
  }
});

http://jsfiddle.net/bmmq9/1/

コンソールを備えたブラウザ(DevToolsを備えたChromeやFirebugを備えたFirefoxなど)をお持ちの場合は、console.log代わりに使用できalertます。これにより、オブジェクトであるという事実よりもはるかに多くの情報が得られます。ただし、テスト後に必ず削除してください。そうしないと、IEがjavascriptエラーをスローします。

于 2012-06-22T13:28:54.083 に答える
0

$(this).attr( "id")は、キーを押す前にフォーカスがあったフォームフィールドではなく、キーを押すことによってトリガーされたため、IDを返すことはないことがようやくわかりました。本当に探しています。

于 2012-07-02T16:35:30.340 に答える