jQuery submit () не включает отправленную кнопку - PullRequest
19 голосов
/ 05 января 2011

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

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

Редактировать:

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

Ответы [ 3 ]

17 голосов
/ 05 января 2011

На основании ответа 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's 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);
    });
});

, которое добавит имя и значение элемента first button к праву DOMперед отправкой формы (я не уверен, что поведение браузера по умолчанию здесь).Обратите внимание, что это не удаляет tempElement из DOM.Если есть ошибка и форма не отправлена, элемент останется, и у вас будут проблемы, если вы не позаботитесь об этом.

3 голосов
/ 05 января 2011

Данные кнопки отправки отправляются только при нажатии на них. Так что вам также не повезет, если кто-то нажмет клавишу ввода вместо нажатия кнопки отправки.

Я настоятельно рекомендую удалить кнопку удаления из формы, так как она, вероятно, в любом случае не будет нуждаться в большей части информации формы (только идентификатор записи данных, которую вы хотите удалить), замените ее на кнопку (с помощью type="button"), который отправляет другую форму или, если вы можете, разместите там ссылку. (Это ссылка на страницу удаления - в любом случае это лучше по соображениям удобства использования, поскольку она удаляет фокус с опции удаления и снижает риск случайного нажатия пользователями на кнопку удаления.)

1 голос
/ 05 января 2011

Подобные вещи могут быть решены путем включения параметра 'action', который сообщает серверу, какова цель отправки.Например, если ваша форма отправлена ​​через 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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...