Ответ 1
Вы можете передать встроенный обработчик ключевому слову this
, получив элемент, который запустил событие.
like,
onclick="confirmSubmit(this);"
У меня есть форма, где я заменил кнопку отправки с помощью ввода (с кнопкой 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;
}
});
}
Вы можете передать встроенный обработчик ключевому слову this
, получив элемент, который запустил событие.
like,
onclick="confirmSubmit(this);"
Если вы не хотите передавать элемент по нажатию на функцию через параметр, вам нужно получить доступ к объекту события, который происходит, и получить цель от этого объекта. Это проще всего сделать, если вы связываете событие click следующим образом:
$('#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, он печатает атрибут "type" элемента dom Element. Я думаю, вы можете получить форму через методы parent(), используя этот объект.
Это вопрос 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)