Я пытаюсь найти значение кнопки отправки, которая запустила форму для отправки
$("form").submit(function() {
});
Я мог бы запустить событие $ ("input [type = submit]"). Click () для каждой кнопки и установить некоторую переменную, но это кажется менее элегантным, чем то, как вытаскивать кнопку из формы при отправке.
formobj.submit()
. Я думаю, что события щелчка - это то, что нужно.event.submitter
что дает вам то<button>
или<input type="submit">
иное нажатие.Ответы:
Я использовал,
document.activeElement
как показано в этом ответе: как получить сфокусированный элемент с помощью jQuery?Я пользуюсь тем фактом, что кнопка всегда оказывается в фокусе после нажатия на нее. Это не сработает, если вы сделаете
blur()
сразу после щелчка.@Doin обнаружил еще один недостаток. Если пользователь отправляет форму через
enter
текстовое поле, значениеdocument.activeElement
не устанавливается. Вам нужно будет следить за этим самостоятельно, обрабатываяkeypress
событияinput[type="text"]
и тому подобное.Обновление 2017-01: для моей библиотеки Hyperform я решил не использовать,
activeElement
а улавливать все события, которые приводят к отправке формы. Код для этого есть на Github.Если вы используете Hyperform, вы получите доступ к кнопке, запускающей отправку:
источник
activeElement
, потому что «отправитель» может быть определен: A. Через аутентичную активацию щелчком ( щелчок непосредственно с помощью мыши или клавиатуры Пробел / Ввод); Б. Через активацию синтетическим щелчком (buttonElement.click()
илиbuttonElement.dispatch(new MouseEvent(...))
без потери фокуса); C. через форму неявно отправка (взаимодействие клавиатуры с другим полем формы) D. ни на что, когдаformElement.submit()
Я реализовал это и полагаю, что так и будет.
и это событие кнопки отправки, которое устанавливает его
Спасибо за ответы, но это не так уж и элегантно ...
источник
doNotSubmit
класс, внутри функции отправки проверьте, не существует ли класс (иначе не отправляйте), внутри события щелчка удалите класс формыdoNotSubmit
и выполните триггер $ (''. MyForm '). ('Отправить'); после добавления значения кнопки отправки в качестве скрытого поляЯ создал тестовую форму и с помощью Firebug нашел способ получить значение;
К сожалению, только Firefox поддерживает это событие.
источник
Теперь
submitter
в событии отправки есть стандартное свойство.Уже реализовано в Firefox 75 !
Для браузеров, которые его не поддерживают, используйте этот полифилл :
источник
Вот подход, который мне кажется более понятным.
Во-первых, для любых форм:
Когда это событие щелчка запускается для формы, оно просто записывает исходную цель (доступную в объекте события) для последующего доступа. Это довольно широкий ход, так как он срабатывает при любом щелчке в любом месте формы. Комментарии по оптимизации приветствуются, но я подозреваю, что они никогда не вызовут заметных проблем.
Затем в $ ('form'). Submit () вы можете узнать, что было нажато последним, с чем-то вроде
источник
По этой ссылке объект Event содержит поле
Event.target
, в котором:Возвращает строку, представляющую объект, инициировавший событие.
Я только что создал страницу, проверяющую, что это за значение, и похоже, что это представление предназначено для самой формы, а не для нажатой кнопки. Другими словами, Javascript не предоставляет средства для определения нажатой кнопки.
Насколько Дэйва Андерсона решения , это может быть хорошей идеей для тестирования , что в нескольких браузерах перед ее использованием. Возможно, это сработает нормально, но я не могу сказать ни слова.
источник
target
Возвращает всю форму. Таким образом, к сожалению, не помогает обнаружить правильную кнопку отправки.Event.target
не строка. ЭтоEventTarget
объект, которым в данном случае является сама отправленная форма.Один чистый подход - использовать событие щелчка на каждой кнопке формы. Ниже представлена HTML-форма с кнопками сохранения, отмены и удаления:
Ниже приведен jquery. Я отправляю соответствующее «действие» той же функции сервера в зависимости от того, какая кнопка была нажата («сохранить» или «удалить»). Если нажата кнопка «Отмена», я просто перезагружаю страницу.
источник
Я искал и нашел несколько способов получить кнопку отправки
name
+value
на сервер с помощью jQuery + AJAX. Они мне не очень нравились ...Одним из лучших было представленное здесь охотничье решение!
Но я написал еще один.
Хочу поделиться, потому что это хорошо и, по мере необходимости, работает и с формами, загруженными через ajax (после document.ready):
Просто! Когда нажимается кнопка отправки, в форму добавляется скрытое поле, используя то же самое
name
иvalue
кнопки отправки.РЕДАКТИРОВАТЬ: версию ниже легче читать. Кроме того, он позаботится об удалении ранее добавленных скрытых полей (в случае отправки одной и той же формы дважды, что вполне возможно при использовании AJAX).
Улучшенный код:
источник
<button/>
используют один и тот жеname
атрибут. Я бы использовал класс и сослался бы на него в вашем.remove()
.name
атрибута. Если форма используется повторно и содержит входные данные для отправки с разными именами, старые входные данные могут загромождать форму.<button/>
элемент, а<input type="submit" />
он используется в коде ...)Я пробовал некоторые из представленных примеров, но они не работали для наших целей.
Вот скрипка, которую нужно показать: http://jsfiddle.net/7a8qhofo/1/
Я столкнулся с аналогичной проблемой, и именно так мы решили ее в наших формах.
источник
( мероприятие )
источник
вы можете попробовать этот способ с "event.originalEvent.x" и "event.originalEvent.y":
источник
jQuery, похоже, не предоставляет эти данные о событии отправки. Похоже, предложенный вами метод - ваш лучший выбор.
источник
Еще одно решение, поскольку ни одно другое не соответствовало моим требованиям. Преимущество состоит в том, что обнаруживаются щелчки и нажатия клавиш (ввод и пробел) .
Это сработало для меня лучше всего.
источник
С более конкретным обработчиком событий и JQuery для вашего объекта события нажимается кнопка. При необходимости вы также можете получить форму делегирования от этого мероприятия.
В этом документе есть все необходимое для начала работы. JQuery Doc .
источник
Я пишу эту функцию, которая мне помогает
а затем используйте
источник
Там есть податель свойство для формы в SubmitEvent . Однако в настоящее время это не работает в Safari.
Другой подход, который работает во всех браузерах. Однако вы должны полагаться на
form
элемент, а не наevent
объект. Это в основном добавляет свойство «submitter» к объекту элемента формы, на которое можно ссылаться позже при отправке формы.источник