Две кнопки отправки в одной форме
Также убедитесь, что название кнопки имеет правильное имя! Например «кнопка-1» не будет работать. Может спасти кого-то много хлопот, так что имейте это в виду.
Обычно все входные данные в форме отправляются вместе с формой. Поскольку значение кнопки передается только при нажатии, вам придется искать значения формы для этих предварительно определенных имен. Я думаю, что другой ответ ( stackoverflow.com/a/21778226/88409 ), который включает в себя присвоение им одного и того же имени с разными значениями, имеет больше смысла. Затем вы просто берете значение под одним известным именем поля формы. Это также делает более очевидным, что для данного имени входа будет отправлено только одно значение (выбранное), очень похожее на то, как работают переключатели (одно и то же имя, разные значения).
@Triynko, как сказал Робин Грин в комментариях к этому ответу, этот лучше для интернационализации. Например, если страница отображается на испанском языке, текст кнопок, скорее всего, будет другим. Таким образом, логика вашего кода зависит от того, какой текст этой кнопки сломается в этом случае. Переход по имени более безопасен, так как это значение, которое не отображается пользователю и поэтому может рассматриваться скорее как «частная» переменная, а не как сообщение для пользователей.
Вы можете дать каждому входу другое значение и сохранить одно и то же имя:
Затем в коде проверьте, что было вызвано:
if ($_POST['action'] == 'Update') < //action for update here >else if ($_POST['action'] == 'Delete') < //action for delete >else < //invalid action! >
Единственная проблема заключается в том, что вы привязываете свою логику к тексту внутри ввода. Вы также можете дать каждому уникальное имя и просто проверить $_POST за существование этого ввода:
if (isset($_POST['update_button'])) < //update action >else if (isset($_POST['delete_button'])) < //delete action >else < //no button pressed >
@LaszloPapp, как говорит сам ответ, если вы используете выбранный ответ выше, вы можете интернационализировать форму (т.е. перевести на разные языки или диалекты), не затрагивая логику. Если вы используете первую опцию в этом ответе, логика зависит от языка, на котором фактически представлена форма.
@victoroux Просто сказать «это намного лучше» — довольно ужасная аргументация, вы помните, почему вы думали, что это решение будет лучшим в вашей ситуации? Поскольку использование отображаемого значения в качестве уникального идентификатора в коде обычно не выполняется, как только кто-то решит, что кнопке нужен другой текст, или когда вам нужно реализовать второй язык, ваш код внезапно перестанет работать (в противном случае вы могли бы даже сказать, что css-классы не необходимо, так как вы можете выбрать на основе текста абзаца / кнопки xD). Поэтому мне кажется, что и ответ Грега, и Кирилла выжили бы намного лучше в такой ситуации.
@T_D На это ответили в ’09, и я написал 4 года назад. Причина, по которой он все еще работает лучше, заключается именно в тех же аргументах, что и вы. Задний конец и передний конец разделены. Если визуальный дизайнер выбирает изменить слово, пока имя кнопки остается в покое, код на заднем конце продолжит работать. И эта версия, и Грег / Крилл страдают от проблемы обновления кода, которую вы обрисовали, это присуще всем обновлениям языка. Кроме того, 463 голоса резко контрастируют с 177. Этот ответ лучше объясняется и показывает два пути, предоставляя «превосходную» альтернативу.
Есть ли у нас в html какая-то конструкция, которая идентифицирует, по какой ссылке нажимают? Или нам нужно добавить обработчик onClick (будет ли он работать?) Специально в $ (‘form’). AjaxForm (
Чтобы решить проблему «В JavaScript / jQuery, как мы можем получить выбранную кнопку отправки?» (как упомянуто @aandis), я добавил return false; отправьте форму и примените процедуру AJAX по нажатию кнопки. Это позволяет нам использовать $(this).val(); чтобы получить значение.
Еще лучшее решение состоит из использования тегов кнопок для отправки формы:
Таким образом, нет неудобств при интернационализации и нескольких языках отображения (в первом решении метка кнопки также является значением, отправленным на сервер).
Видимо поведение браузера отличается; некоторые передают атрибут value, другие — строку между тегами . Так что будьте осторожны с этим.
Я думаю, что предоставленный фрагмент полностью поддерживается ( w3schools.com/tags/att_button_type.asp )
@kiril фрагмент этой ссылки использует два различных типа
Хорошо, ты прав. Затем я проверил рабочий проект HTML5 W3C. Цитирование: >> Атрибут value дает значение элемента для целей отправки формы. Значение элемента — это значение атрибута значения элемента, если он есть, или пустая строка в противном случае. >> ПРИМЕЧАНИЕ. Кнопка (и ее значение) включается в отправку формы только в том случае, если сама кнопка была использована для инициирования отправки формы.
@Jeroen Bull. Какие браузеры отправляют текст между тегами? Вход или кнопка должны только когда-либо отправлять атрибут «значение». Кнопка может буквально иметь между тегами что угодно, включая изображения или другие теги HTML. В этом весь смысл использования кнопки над элементом ввода, и вы пытаетесь предположить, что браузер собирается сбросить весь этот контент в качестве значения? Ни за что.
Я пытаюсь использовать этот ответ, но когда я сбрасываю свой $ _POST, он показывает только другие данные в форме, почему это?
Html два submit одной форме
БлогNot. Использование нескольких кнопок отправки данных (submit) на одной форме
Использование нескольких кнопок отправки данных (submit) на одной форме
Когда на форме расположено несколько кнопок отправки данных , есть несколько вариантов, как определять, какая именно из кнопок самбита была нажата.
Самое первое, что пришло в голову — использовать Javascript + скрытый параметр формы:
Файл index2.php , указанный здесь в качестве обработчика, покажет какая кнопка была нажата:
А что произойдёт при нажатии клавиши Enter, а не экранной кнопки для отправки формы? А вот неясно. у меня, например, ни в Файрфоксе, ни в Опере, ни в Internet Explorer — вообще ничего, ну не станут браузеры передавать параметр без type=»submit» 🙂
На самом деле в HTML можно делать и несколько кнопок с TYPE=»submit» , но тогда по умолчанию всегда работает первая по коду формы, в нашеми случае Submit 1. Если эту первую надо показать «не первой» (например, расположить правее второй) — можно просто выровнять стилями направо.
А может обойтись без стилей и яваскрипта? Подумал было так:
Теперь при нажатии Enter как бы нажимается невидимая кнопка Default . Вот такой index2.php покажет, что передано:
Увы, в ИЕ просто ничего не передаётся, кроме текста из поля ввода, а в Хроме всё равно «нажимается» первая кнопка, только в Опере и Фоксе всё нормально. Вывод — не мудрить, всегда ставить кнопку «действия по умолчанию» первой, ставить сколько надо INPUT TYPE=»submit» да и всё 🙂
06.08.2012, 14:04 [14966 просмотров]
Как отправить несколько форм одной кнопкой submit?
submit работает на AJAX и отправляет каждую форму без проблем совершенно. Вот только 3 кнопки submit не красиво и не удобно для пользователя. Скажите, можно ли скрыть кнопки submit (допустим, через display:none) от пользователя и оставить лишь одну, которая при ее нажатии нажимала на все кнопки по очереди?
P.S.: Писать другой обработчик не вариант, т.к. система смежная с другой и ее работу нарушать нельзя. Нужно как-то обойти вышеописанную проблему.
ну, начнем с того что форм у вас не 3, а 1.
Кнопки в форме 3, хотя достаточно одной, в конце формы(или в любом другом месте внутри тега формы).
Как у вас работает аякс — загадка, ибо кода вы не привели, а то что здесь нарисовано работать нормально не должно, так как:
1) id — уникальный идентификатор элемента, что как бэ намекает на то что повторяться для нескольких элементов он не должен.
2) форма отправленная в текущем виде на сервере будет просто передавать на сервер 3 последних значения из всего набора инпутов, тк сервер примет строку в которой будут повторяющиеся имена переменных — соответственно последние полученные данные затрут предыдущие. Это можно побороть яваскриптом, который будет реализовать анальный костыль, например считывая 3 инпута перед вызывающей кнопкой. Если вы знаете толк в извращениях — флаг в руки.
3) так как все 3 имени инпутов в группах совпадают — какой смысл их различать? как угадать из какого я отправляю данные?
4) если нужно 3 раза вызвать обработчик на сервере — 3 раза вызывайте аякс запрос, каждый раз передавая последующие 3 значения из инпутов, не забывайте, что аякс — асинхронная функция, запуск следующего запроса лучше всего вешать на onsuccess предыдущего запроса. Измените ид для каждого элемента на уникальный, или уберите вообще. Проще всего сделать все инпуты одной группы с одинаковым классом, по нему и выбирать группу, например $(‘.firstinputs’)
В чем прикол трех одинаковых форм? Назовите их по разному и отправте одним запросом, типо fio_3, fio_2, и впринципе лучше переменные с транслита называть английскими словами
Нельзя. Обработчик должен считать именно эти названия и присвоить каждой отправленной форме свой ID.
Да это я для примера так назвал, естественно у меня все на английском названо и более понятно)))
danyfir, причем тут? как понять что вообще должно происходить? если что id должны быть один у всех ,а тут 3 одинаковых, непонятно что и как работает но мы должны разбираться
Илья, не можете ответить грамотно, либо не понимаете вопроса — проходите мимо! к чему разводить дискуссии как агрошкольники? Написал так, как смог. Кто сможет, тот поймет и ответит.
Лишь указал на полный абсурд Вашего поста и Вашу глупость.
И что Вам надо тоже непонятно. Ну создайте 4 кнопку. По клику она будет по очереди делать запрос 1, 2 и 3. Тут у Вас проблема? Или Вам не сформировать запрос? Создайте свой уникальный data-атрибут каждому полю. К нему обращайтесь для создания запроса.
danyfir, а вот хамить не надо.
Научитесь формулировать вопросы, чтобы все могли понять.
И если у Вас код рабочий другой, то как Вам помочь? Гадать на кофейной гуще?
Выкладывайте реальный код.