Одна форма два действия - PullRequest
1 голос
/ 28 сентября 2010

Привет, у меня есть несколько полей формы. Я хочу, чтобы при нажатии кнопки элемент управления отправлялся в действие 1, но при нажатии кнопки 2 его нужно отправить в действие 2. В настоящее время я использую js для динамического изменения действия формы при нажатии. но есть ли другое решение. Я не могу выполнить проверку после отправки одним и тем же методом, поэтому должны быть два разных метода.

В этом случае 2 кнопки: просмотр (необходимо отобразить html-данные) и загрузка (те же данные, что и у файла csv). Я использую CakePHP 1.2, но я чувствую, что это больше общая проблема

Ответы [ 3 ]

3 голосов
/ 28 сентября 2010

Одна форма может иметь только одно действие. Это ограничение HTML. Чтобы обойти это на стороне клиента, вам нужен Javascript.

Похоже, что лучшей идеей было бы дать каждой кнопке отправки отличительные name и value. Это будет отправлено как другие элементы формы, так что вы можете определить в контроллере, какая кнопка была нажата. Оттуда остается только переключить некоторую логику просмотра в контроллере между нормальным выводом и загрузкой.

0 голосов
/ 19 января 2015

HTML5 имеет атрибут formaction для этого

<form action="/url" id="myForm">
     <input type="submit" value="save1" formAction="/url1" />
     <input type="submit" value="save2" formAction="/url2" />
</form>

Вот запасной вариант, если вам это нужно.

if (!('formAction' in document.createElement('input'))){
 $('form').on('click', 'input[type=submit]', function (e) {
    var attr = this.getAttribute('formAction');

    if (attr) {
        this.action = attr; //Set the form's action to formAction
    }
  });
}
0 голосов
/ 14 октября 2010

Я обнаружил, что есть несколько решений

  1. Обычный JavaScript для изменения действия формы при нажатии кнопок
  2. AJAX отправлять данные двум отдельным действиям по нажатию отдельных кнопок
  3. В соответствии с предложением deceze выполнить обработку на стороне сервера (что было нелегко в моем случае)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...