У меня есть .submit()
событие для отправки формы. У меня также есть несколько форм на странице, но только один здесь для этого примера. Я хотел бы знать, какая кнопка отправки была нажата без применения .click()
события к каждому из них.
Вот настройки:
<html>
<head>
<title>jQuery research: forms</title>
<script type='text/javascript' src='../jquery-1.5.2.min.js'></script>
<script type='text/javascript' language='javascript'>
$(document).ready(function(){
$('form[name="testform"]').submit( function(event){ process_form_submission(event); } );
});
function process_form_submission( event ) {
event.preventDefault();
//var target = $(event.target);
var me = event.currentTarget;
var data = me.data.value;
var which_button = '?'; // <-- this is what I want to know
alert( 'data: ' + data + ', button: ' + which_button );
}
</script>
</head>
<body>
<h2>Here's my form:</h2>
<form action='nothing' method='post' name='testform'>
<input type='hidden' name='data' value='blahdatayadda' />
<input type='submit' name='name1' value='value1' />
<input type='submit' name='name2' value='value2' />
</form>
</body>
</html>
Помимо применения события .click () к каждой кнопке, есть ли способ определить, какая кнопка отправки была нажата?
name
?Ответы:
Я задал тот же вопрос: как я могу получить кнопку, которая вызвала отправку из события отправки формы?
Я закончил тем, что придумал это решение, и оно работало довольно хорошо:
В вашем случае с несколькими формами вам, возможно, придется немного подправить, но это все равно должно применяться
источник
Я обнаружил, что это работает.
источник
Это работает для меня:
источник
id
изactiveElement
, я$(document.activeElement).attr('id');
document.activeElement.id
document.activeElement
нет входа. В моем случае это модальный div (который содержит форму).Когда форма отправлена:
document.activeElement
даст вам кнопку отправки, которая была нажата.document.activeElement.getAttribute('value')
даст вам значение этой кнопки.источник
Вот подход, который кажется чище для моих целей.
Во-первых, для любой формы:
Когда это событие щелчка запускается для формы, оно просто записывает исходную цель (доступную в объекте события), к которой можно получить доступ позже. Это довольно широкий штрих, так как он будет срабатывать при любом щелчке в любом месте формы. Комментарии по оптимизации приветствуются, но я подозреваю, что это никогда не вызовет заметных проблем.
Затем, в
$('form').submit()
, вы можете узнать, что было в последний раз нажал, с чем-то вродеисточник
return false
, тогда как этот метод работает правильно, поскольку щелчок привязан к форме, а не к ее дочерним элементам.... $(event.target))
но редактирование невозможно, так как изменения должны быть> 6 символовВау, некоторые решения могут быть сложными! Если вы не возражаете против использования простого глобального, просто воспользуйтесь тем, что событие нажатия кнопки ввода срабатывает первым. Далее можно отфильтровать селектор $ ('input') для одной из многих форм, используя $ ('# myForm input').
источник
Я нашел лучшее решение
Это не только работает на входах, но и на тегах кнопок. Также он получает идентификатор кнопки.
источник
$(document.activeElement).attr('id')
возвращается обработчик отправкиundefined
Другое возможное решение - добавить скрытое поле в форму:
Затем в функцию ready добавьте функции для записи, какая клавиша была нажата:
Теперь в форме обработчик представления прочитайте скрытую переменную и решите на ее основе:
источник
Основываясь на том, что сделали Стэн и Янн-ч, но по умолчанию используется первая кнопка. Прелесть этого общего подхода заключается в том, что он улавливает как щелчок, так и клавишу ввода (даже если фокус был не на кнопке. Если вам нужно разрешить ввод в форме, просто ответьте на это, когда кнопка находится в фокусе ( т.е. ответ Стэна.) В моем случае я хотел разрешить вводу отправлять форму, даже если текущий фокус пользователя был на текстовом поле.
Я также использовал атрибут name, а не id, но это тот же подход.
источник
Этот работал для меня
источник
Если вы не имеете в виду, что не добавляете событие .click, что вы не хотите иметь отдельные обработчики для этих событий, вы можете обрабатывать все клики (отправки) в одной функции:
источник
event.preventDefault
или сделайте что-нибудь подобноеinput.parents("form")[0].submit()
.Поскольку я не могу комментировать принятый ответ, я привожу здесь измененную версию, которая должна учитывать элементы, которые находятся вне формы (то есть: прикреплены к форме с помощью
form
атрибута). Это для современного браузера: http://caniuse.com/#feat=form-attribute .closest('form')
Используются в качестве запасного варианта для неподдерживаемогоform
атрибутаисточник
"button,[type=submit]"
добавить скрытое поле
источник
button[type=submit]
иinput[type=image]
.Для меня лучшим решением было следующее:
источник
Работая с этим превосходным ответом , вы можете проверить активный элемент (кнопку), добавить скрытый ввод в форму и при необходимости удалить его в конце обработчика отправки.
Примечание: я лично добавляю класс
form-js
во все формы, которые отправляются через JavaScript.источник
Аналогично ответу Стэна, но:
источник
Это решение используется мной и работает очень хорошо:
источник
Это помогло мне https://stackoverflow.com/a/17805011/1029257
Форма отправлена только после нажатия кнопки «Отправить».
источник
Вот мое решение:
источник
Я также сделал решение, и оно работает довольно хорошо:
он использует jQuery и CSS
Во-первых, я создал быстрый CSS-класс, который можно встроить или в отдельный файл.
Затем, по событию click кнопки в форме, добавьте класс CSS к кнопке. Если у кнопки уже есть класс CSS, удалите его. (Нам не нужны два CSS-класса [на всякий случай]).
Теперь протестируйте кнопку, чтобы увидеть, что у нее есть класс CSS, если у тестируемой кнопки нет CSS, то у другой кнопки будет.
Надеюсь это поможет! Ура!
источник
button[type=submit]
иinput[type=image]
.hasClass()
иremoveClass()
избыточны, так какaddClass()
не добавят один и тот же класс дважды.Вы можете создать тип ввода = «скрытый» в качестве держателя для информации идентификатора кнопки.
В этом случае форма передает значение «1» (идентификатор вашей кнопки) при отправке. Это работает, если onClick происходит до отправки (?), Но я не уверен, что это всегда так.
источник
Простой способ определить, какая кнопка <button> или <input type = "button" ...> нажата, - это проверить их 'id':
источник
Вот пример, в котором this.form используется для получения правильной формы, в которую отправляется объект, и поля данных для хранения последнего элемента, на который был сделан щелчок / фокус. Я также поместил код подтверждения в тайм-аут, чтобы убедиться, что события щелчка происходят до его выполнения (некоторые пользователи сообщали в комментариях, что в Chrome иногда событие щелчка вызывается после отправки).
Работает при навигации как с помощью клавиш, так и с помощью мыши / пальцев без учета браузеров для отправки события щелчка по клавише RETURN (хотя это не помешает), я добавил обработчик событий для событий фокуса для кнопок и полей.
Вы можете добавить кнопки type = "submit" к элементам, которые сохраняются при нажатии.
В демонстрации я установил красную рамку, чтобы показать выбранный элемент и предупреждение, которое показывает имя и значение / метку.
Вот скрипка
И вот (тот же) код:
Javascript:
DUMMY HTML:
DUMB CSS:
источник
Я пишу эту функцию, которая помогает мне
а затем использовать
источник
источник
Вы хотите использовать window.event.srcElement.id следующим образом:
для кнопки, которая выглядит как:
вы получите предупреждение, которое гласило: «элемент, на который нажали, был myButton.
В вашем улучшенном примере вы можете добавить window.event.srcElement к process_form_submission, и у вас будет ссылка на любой элемент, вызвавший процесс.
источник