Подтвердить что ты не робот

JQuery submit() не включает отправленную кнопку

У меня есть одна форма, в которой есть несколько элементов и две кнопки отправки, одна - "Сохранить", другая - "Удалить". На кнопке "Удалить" я использую диалог jQuery, чтобы подтвердить, что пользователь хочет удалить. Затем, если они подтвердят, я отправлю форму. Проблема заключается в том, что jQuery.submit() не включает исходную кнопку отправки при ее отправке, поэтому я не могу различить на сервере "Удалить из сохранения", так как они оба используют одну и ту же форму. Если я удалю диалог jQuery, то значение кнопки отправки опубликовано, как ожидалось. Это должно быть очень распространено, и я надеюсь, что кто-то сможет поделиться решением. Я искал вокруг и не могу найти ничего полезного (это только я или сосание Google в последнее время?)

Спасибо за любую помощь...

EDIT:

Кнопки отправки имеют имена и значения. Он отлично работает, если не использовать jQuery.submit()

4b9b3361

Ответ 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/