Я думаю, это должно быть просто.Скажем, у меня есть следующий jQuery:
$someForm.live('submit', function(event) {
// do something
});
Если в этой форме более одной кнопки отправки (<button type="submit">
), и я хочу сослаться на атрибут name
кнопки, котораябыл нажат, как мне сделать это в функции обратного вызова?
Обновление - Уточнение
В контексте обратного вызова и this
, и event.target
относятся к самой форме, а event
глубоко вложенный объект.Он может содержать то, что я ищу, но я еще не нашел его.
Еще один способ сформулировать этот вопрос: «если я наблюдаю за событием отправки в форме (недочерние элементы), есть ли способ, когда я обрабатываю это событие, определить дочерний элемент, из которого событие всплыло в форме? " Является ли выбранный элемент даже доступным в этой точке, или браузер просто считает его событием в самой форме, которое не имеет более глубокого происхождения?
Обновление 2 - Ответ
Похоже, что ответ на этот вопрос сказал Ник Крейвер - событие отправки происходит из самой формы, поэтому его нельзя отследить до кнопки, у которой было событие щелчка, а не событие отправки. Чтобы получить дополнительную информацию о щелчке, необходимо иметь прослушиватель щелчков для кнопки.
В некоторых случаях (например, у меня) вам могут потребоваться оба: 1) для захвата нажатия кнопки отправкии 2) привязать к событию отправки в форме.Например, если вы используете jQuery Validate, он запрещает отправку формы до тех пор, пока она не станет действительной.Если вы отправите форму через ajax, связавшись с нажатием кнопки, вы обойдете эту проверку.
Как показал Ник, вы можете решить эту проблему путем сбора информации о кнопке с помощью прослушивателя щелчка для кнопок изатем используйте эту информацию в обратном вызове для отправки формы.
Чтобы передать информацию о кнопке от обратного вызова click в обратный вызов для отправки формы, используйте jQuery.data()
для ее сохранения в форме.Например:
// In the button's click event callback...
jQuery.data($someForm, 'lastSubmitButton', event.target.name);
// In the form's submit event callback...
var whichButton = jQuery.data($someForm, 'lastSubmitButton');
Это предотвращает необходимость использования глобальной переменной.