获取元素触发jQuery中的onclick事件?

我有一个表单,我已经用一个onclick函数replace了提交button的input(type = button),它调用了一个现有的函数:

<form accept-charset="UTF-8" action="/admin/message_campaigns" class="new_message_campaign" id="new_message_campaign" method="post"> <!-- some fields --> <input onclick="confirmSubmit();" type="button" value="Send" /> </form> 

在confirmSubmit中,我希望能够dynamic获取表单对象(提交它),而不是硬编码表单的ID,或作为调用confirmSubmit()的一部分传递它。 我曾经想过,我可以通过首先获得被点击的dom元素来做到这一点,即像这样的东西:

 var form = $(this).parents("form"); 

其中$(this)是调用该函数的对象,即onclick的input。 这虽然不起作用。 我认为这工作,如果我设置了.click(function(){语法。我可以得到以不同的方式调用函数的元素?

编辑 – 从下面的@claudio得到答案,为了清楚起见,这里是完整的函数和调用:

 <form accept-charset="UTF-8" action="/admin/message_campaigns" class="new_message_campaign" id="new_message_campaign" method="post"> <!-- some fields --> <input onclick="confirmSubmit($(this));" type="button" value="Send" /> </form> 

和函数本身。 请注意,“jConfirm”是jquery-alerts插件的一种方法(http://abeautifulsite.net/blog/2008/12/jquery-alert-dialogs/),但这与这个问题并不相关 – 关键是获取表单对象,而不是随后完成的:

 function confirmSubmit(caller) { var form = caller.parents("form"); jConfirm('Are you sure?', 'Please Confirm', function(result){ if (result) { form.submit(); } else { return false; } }); } 

您可以将内联处理程序传递给this关键字,获取触发事件的元素。

喜欢,

 onclick="confirmSubmit(this);" 

如果您不想通过参数将点击元素传递给函数,则需要访问正在发生的事件对象,并从该对象获取目标。 如果你像这样绑定点击事件,这是最容易完成的:

 $('#sendButton').click(function(e){ var SendButton = $(e.target); var TheForm = SendButton.parents('form'); TheForm.submit(); return false; }); 

尝试这个

 <input onclick="confirmSubmit(event);" type="button" value="Send" /> 

随着这个

 function confirmSubmit(event){ var domElement =$(event.target); console.log(domElement.attr('type')); } 

我尝试了它在Firefox中,它打印DOMtypes点击的“type”属性。 我想你可以通过使用这个对象的parent()方法来获取表单。

这是顶部的谷歌stackoverflow的问题,但所有的答案都不是jQuery相关!

 $(".someclass").click( function(event) { console.log(event, this); } ); 

“事件”包含两个重要的值:

event.currentTarget – 触发事件的元素('.someclass'元素)

event.target – 元素被点击(如果'.someclass'[div]是其他元素,并且你点击了它们)

这个 – 被设置为触发元素('.someclass'),但是它是JavaScript元素,而不是jQuery元素,所以如果你想使用它的一些jQueryfunction,你必须先把它改成jQuery元素: $(this)