Подтвердить что ты не робот

Получить элемент, запускающий событие onclick в 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 я хотел бы иметь возможность динамически получать объект формы (отправить его), вместо того, чтобы жестко кодировать идентификатор формы или передавать его как часть вызова confirmSubmit(). Я бы подумал, что могу сделать это, сначала получив элемент dom, на который был нажат, например, что-то вроде этого:

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

где $(this) - это объект, который вызывает функцию, т.е. ввод с помощью onclick. Однако это не работает. Я думаю, что это сработает, если я установил его с синтаксисом .click(function(){. Могу ли я получить элемент, который вызвал функцию по-другому?

EDIT - получил ответ от @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-warn (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;
    }
  });
}
4b9b3361

Ответ 1

Вы можете передать встроенный обработчик ключевому слову this, получив элемент, который запустил событие.

like,

onclick="confirmSubmit(this);"

Ответ 2

Если вы не хотите передавать элемент по нажатию на функцию через параметр, вам нужно получить доступ к объекту события, который происходит, и получить цель от этого объекта. Это проще всего сделать, если вы связываете событие click следующим образом:

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

    return false;
});

Ответ 3

Попробуйте это

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

Наряду с этим

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

Я попробовал его в firefox, он печатает атрибут "type" элемента dom Element. Я думаю, вы можете получить форму через методы parent(), используя этот объект.

Ответ 4

Это вопрос google stackoverflow, но все ответы не связаны с jQuery!

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

'event' содержит 2 важных значения:

event.currentTarget - элемент, к которому запускается событие (элемент .someclass)

event.target - элемент щелкнул (в случае, если внутри ".someclass" [div] - другие элементы, и вы нажали на них)

этот - установлен для запуска элемента ('.someclass'), но это элемент JavaScript, а не элемент jQuery, поэтому, если вы хотите использовать на нем какую-то функцию jQuery, вы должны сначала изменить его к элементу jQuery: $(this)