我试图使用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?
}
});
答案 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);
}
});
如果你有一个带控制台的浏览器(比如带有DevTools的Chrome或带有Firebug的Firefox),你可以使用console.log
代替alert
,它会提供比它是一个对象更多的信息。
但是一定要在测试后删除它,否则IE会抛出一个javascript错误。
答案 2 :(得分:0)
我终于发现$(this).attr(“id”)永远不会返回id,因为它是由按键触发的,而不是由按键之前具有焦点的表单字段触发的,这是我真正想要的是什么。