确定由ENTER触发的表单元素

时间:2012-06-22 13:01:42

标签: jquery

我试图使用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?
        }
    });

3 个答案:

答案 0 :(得分:2)

使用事件委派你可以试试这段代码:

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

在您的示例中,$(this)document对象本身(而不是触发事件的元素)

另请注意,如果您的所有input字段都定义了id属性,则此代码有效(否则将无法为某些元素定义this.id

答案 1 :(得分: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错误。

答案 2 :(得分:0)

我终于发现$(this).attr(“id”)永远不会返回id,因为它是由按键触发的,而不是由按键之前具有焦点的表单字段触发的,这是我真正想要的是什么。