获取元素在jquery中触发onclick事件?

时间:2011-05-20 11:12:16

标签: javascript jquery

我有一个表单,我用输入(带有type =按钮)替换了提交按钮,并带有一个调用现有函数的onclick:

<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中,我希望能够动态获取表单对象(提交它),而不必对表单的id进行硬编码,或者将其作为调用confirmSubmit()的一部分传递。我原本以为我可以通过首先获得点击的dom元素来做到这一点,就像这样:

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

其中$(this)是调用函数的对象,即onclick的输入。但这不起作用。如果我使用.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;
    }
  });
}

4 个答案:

答案 0 :(得分:61)

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

喜欢,

onclick="confirmSubmit(this);"

答案 1 :(得分:39)

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

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

    return false;
});

答案 2 :(得分:22)

试试这个

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

与此同时

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

我在firefox中尝试过它,它打印了dom Element点击的'type'属性。我猜你可以使用这个对象通过parents()方法获取表单。

答案 3 :(得分:7)

这是google stackoverflow的首要问题,但所有答案都与jQuery无关!

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

&#39;事件&#39;包含两个重要的值:

event.currentTarget - 触发事件的元素(&#39; .someclass&#39;元素)

event.target - 点击了元素(如果内部&#39; .someclass&#39; [div]是其他元素并且您点击了它们)

这个 - 设置为触发元素(&#39; .someclass&#39;),但它是JavaScript元素,而不是jQuery元素,所以如果你想使用一些jQuery函数,你必须先将它改为jQuery元素: $(this)