JQuery submit() не включает отправленную кнопку
У меня есть одна форма, в которой есть несколько элементов и две кнопки отправки, одна - "Сохранить", другая - "Удалить". На кнопке "Удалить" я использую диалог jQuery, чтобы подтвердить, что пользователь хочет удалить. Затем, если они подтвердят, я отправлю форму. Проблема заключается в том, что jQuery.submit() не включает исходную кнопку отправки при ее отправке, поэтому я не могу различить на сервере "Удалить из сохранения", так как они оба используют одну и ту же форму. Если я удалю диалог jQuery, то значение кнопки отправки опубликовано, как ожидалось. Это должно быть очень распространено, и я надеюсь, что кто-то сможет поделиться решением. Я искал вокруг и не могу найти ничего полезного (это только я или сосание Google в последнее время?)
Спасибо за любую помощь...
EDIT:
Кнопки отправки имеют имена и значения. Он отлично работает, если не использовать jQuery.submit()
Ответы
Ответ 1
На основе ответа karim79:
$("input[type=submit], input[type=button], button").click(function(e) {
var self= $(this),
form = self.closest(form),
tempElement = $("<input type='hidden'/>");
// clone the important parts of the button used to submit the form.
tempElement
.attr("name", this.name)
.val(self.val())
.appendTo(form);
// boom shakalaka!
form.submit();
// we don't want our temp element cluttering up the DOM, do we?
tempElement.remove();
// prevent default since we are already submitting the button form.
e.preventDefault();
});
ОБНОВЛЕНИЕ:
Я просто понял, что указанный код, вероятно, не тот, который вы ищете:
Если вы вызываете submit на сам элемент формы ($("form").submit();
), вам понадобится что-то вроде этого:
$("form").submit(function(){
var form = $(this);
$("input[type=submit], input[type=button], button", form).eq(0).each(function(){
var self= $(this),
tempElement = $("<input type='hidden'/>");
// clone the important parts of the button used to submit the form.
tempElement
.attr("name", this.name)
.val(self.val())
.appendTo(form);
});
});
Что добавит имя и значение элемента первой кнопки в DOM прямо перед отправкой формы (я не уверен, что здесь используется поведение браузера по умолчанию). Обратите внимание, что это не удаляет tempElement
из DOM. Если есть ошибка, и форма не отправлена, элемент останется, и у вас возникнут проблемы, если вы не позаботитесь об этом.
Ответ 2
Данные кнопки отправки передаются только при нажатии. Таким образом, вам также не повезло, если кто-то нажал клавишу ввода, а не нажал кнопку отправки.
Я настоятельно рекомендую удалить кнопку удаления из формы, так как в любом случае, вероятно, она не понадобится для большей части информации о форме (только идентификатор записи данных, которую вы хотите удалить), измените ее на кнопку (с type="button"
), который представляет другую форму или, если можно, поместите туда ссылку. (Это ссылки на страницу удаления - в любом случае это лучше для удобства использования, поскольку оно удаляет фокус с опции удаления и уменьшает риск случайного нажатия ваших пользователей на кнопку удаления.)
Ответ 3
Эту проблему можно решить, добавив параметр "действие", как-то, что говорит серверу, какова цель представления. Например, если ваша форма отправлена через GET:
$("form :input").click(function() {
var $form = $(this).closest("form");
var submitTo = $form.attr("action") + '?action=' + $(this).val();
alert(submitTo);
// window.location.href = submitTo;
return false;
});
http://jsfiddle.net/karim79/JT3GV/5/