HTML форма с двумя кнопками отправки и двумя" целевыми " атрибутами
Привет у меня есть один HTML-тег
.форма имеет только один .
однако я хочу иметь 2 разных target=""
атрибуты в зависимости от того, какую кнопку Вы нажмете, чтобы отправить форму. Это, вероятно, какой-то причудливый javascript, но я понятия не имею, с чего начать.
любые идеи, как я мог бы создать две кнопки, каждая из которых представляет одну и ту же форму, но каждая кнопка дает форме другую цель?
спасибо!
15 ответов:
более уместно подходить к этой проблеме с менталитетом, что форма будет иметь действие по умолчанию, привязанное к одной кнопке отправки, а затем альтернативное действие, привязанное к простой кнопке. Разница здесь заключается в том, что тот идет под представить будет использоваться, когда пользователь отправляет форму, нажав Enter, а другой будет уволен, когда пользователь нажимает на кнопку.
во всяком случае, с учетом этого, это должно сделать это:
<form id='myform' action='jquery.php' method='GET'> <input type='submit' id='btn1' value='Normal Submit'> <input type='button' id='btn2' value='New Window'> </form>
С этим javascript:
var form = document.getElementById('myform'); form.onsubmit = function() { form.target = '_self'; }; document.getElementById('btn2').onclick = function() { form.target = '_blank'; form.submit(); }
подходы, которые привязывают код к событию щелчка кнопки отправки, не будут работать в IE.
Я делаю это на стороне сервера. То есть форма всегда подчиняется одной и той же цели, но у меня есть серверный скрипт, который отвечает за перенаправление в нужное место в зависимости от того какая кнопка была нажата.
если у вас есть несколько кнопок, таких как
<form action="mypage" method="get"> <input type="submit" name="retry" value="Retry" /> <input type="submit" name="abort" value="Abort" /> </form>
Примечание : я использовал GET, но он работает и для POST
затем вы можете легко определить, какая кнопка была нажата - если переменная
retry
существует и имеет значение, то повтор был нажат, и если переменнаяabort
существует и имеет значение, после чего был нажат abort. Эти знания затем могут быть использованы для перенаправления в соответствующее место.этот метод не требует Javascript.
Примечание : что некоторые браузеры могут отправлять форму без нажатия каких-либо кнопок (нажав enter). Нестандартно, как это, вы должны учитывать это, имея четкое
default
действие и активация, что всякий раз, когда ни одна кнопка не была нажата. Иначе говоря, убедитесь, что ваша форма не что-то толковое (будь то отображение полезного сообщения об ошибке или принятие значения по умолчанию) когда кто-то хиты вводятся в другой элемент формы вместо нажатия кнопки Отправить кнопка, а не просто сломать.
В случае, если вы до HTML5, вы можете просто использовать атрибут
formaction
. Это позволяет иметь другую формуaction
для каждой кнопки.<!DOCTYPE html> <html> <body> <form> <input type="submit" formaction="firsttarget.php" value="Submit to first" /> <input type="submit" formaction="secondtarget.php" value="Submit to second" /> </form> </body> </html>
это работает для меня:
<input type='submit' name='self' value='This window' onclick='this.form.target="_self";' /> <input type='submit' name='blank' value='New window' onclick='this.form.target="_blank";' />
в этом примере, взятом из
http://www.webdeveloper.com/forum/showthread.php?t=75170
вы можете увидеть, как изменить цель на кнопке OnClick события.
function subm(f,newtarget) { document.myform.target = newtarget ; f.submit(); } <FORM name="myform" method="post" action="" target="" > <INPUT type="button" name="Submit" value="Submit" onclick="subm(this.form,'_self');"> <INPUT type="button" name="Submit" value="Submit" onclick="subm(this.form,'_blank');">
пример:
<input type="submit" onclick="this.form.action='new_target.php?do=alternative_submit'" value="Alternative Save" />
вуаля. Очень "причудливый", три слова JavaScript!
вот быстрый пример сценария, который отображает форму, которая изменяет целевой тип:
<script type="text/javascript"> function myTarget(form) { for (i = 0; i < form.target_type.length; i++) { if (form.target_type[i].checked) val = form.target_type[i].value; } form.target = val; return true; } </script> <form action="" onSubmit="return myTarget(this);"> <input type="radio" name="target_type" value="_self" checked /> Self <br/> <input type="radio" name="target_type" value="_blank" /> Blank <br/> <input type="submit"> </form>
HTML:
<form method="get"> <input type="text" name="id" value="123"/> <input type="submit" name="action" value="add"/> <input type="submit" name="action" value="delete"/> </form>
JS:
$('form').submit(function(ev){ ev.preventDefault(); console.log('clicked',ev.originalEvent,ev.originalEvent.explicitOriginalTarget) })
простой и понятный, это отправит имя кнопки, которая была нажата, а затем будет ветвиться, чтобы делать все, что вы хотите. Это может уменьшить потребность в двух целях. Меньше страниц...!
<form action="twosubmits.php" medthod ="post"> <input type = "text" name="text1"> <input type="submit" name="scheduled" value="Schedule Emails"> <input type="submit" name="single" value="Email Now"> </form>
twosubmits.php
<?php if (empty($_POST['scheduled'])) { // do whatever or collect values needed die("You pressed single"); } if (empty($_POST['single'])) { // do whatever or collect values needed die("you pressed scheduled"); } ?>
<form id='myForm'> <input type="button" name="first_btn" id="first_btn"> <input type="button" name="second_btn" id="second_btn"> </form> <script> $('#first_btn').click(function(){ var form = document.getElementById("myForm") form.action = "https://foo.com"; form.submit(); }); $('#second_btn').click(function(){ var form = document.getElementById("myForm") form.action = "http://bar.com"; form.submit(); }); </script>
это возможно на стороне сервера.
<button type="submit" name="signin" value="email_signin" action="/signin">Sign In</button> <button type="submit" name="signin" value="facebook_signin" action="/facebook_login">Facebook</button>
и в моем узле серверного скрипта
app.post('/', function(req, res) { if(req.body.signin == "email_signin"){ function(email_login) {...} } if(req.body.signin == "fb_signin"){ function(fb_login) {...} } });
на каждой из ваших кнопок вы могли бы иметь следующее;
<input type="button" name="newWin" onclick="frmSubmitSameWin();"> <input type="button" name="SameWin" onclick="frmSubmitNewWin();">
тогда есть несколько небольших функций js;
<script type="text/javascript"> function frmSubmitSameWin() { form.target = ''; form.submit(); } function frmSubmitNewWin() { form.target = '_blank'; form.submit(); } </script>
это должно сделать трюк.
есть обе кнопки Отправить на текущую страницу, а затем добавьте этот код в верхней:
<?php if(isset($_GET['firstButtonName']) header("Location: first-target.php?var1={$_GET['var1']}&var2={$_GET['var2']}"); if(isset($_GET['secondButtonName']) header("Location: second-target.php?var1={$_GET['var1']}&var2={$_GET['var2']}"); ?>
Это также можно сделать с помощью $_SESSION, если вы не хотите, чтобы они видели переменные.
Альтернативное Решение. Не перепутайте с onclick, кнопками, серверной стороной и всем остальным.Просто создайте новую форму с другим действием, как это.
<form method=post name=main onsubmit="return validate()" action="scale_test.html"> <input type=checkbox value="AC Hi-Side Pressure">AC Hi-Side Pressure<br> <input type=checkbox value="Engine_Speed">Engine Speed<br> <input type=submit value="Linear Scale" /> </form> <form method=post name=main1 onsubmit="return v()" action=scale_log.html> <input type=submit name=log id=log value="Log Scale"> </form>
теперь в Javascript вы можете получить все элементы основной формы в v () с помощью getElementsByTagName (). Чтобы узнать, установлен ли флажок или нет
function v(){ var check = document.getElementsByTagName("input"); for (var i=0; i < check.length; i++) { if (check[i].type == 'checkbox') { if (check[i].checked == true) { x[i]=check[i].value } } } console.log(x); }
Это может помочь кому-то:
использовать атрибут formtarget
<html> <body> <form> <!--submit on a new window--> <input type="submit" formatarget="_blank" value="Submit to first" /> <!--submit on the same window--> <input type="submit" formaction="_self" value="Submit to second" /> </form> </body> </html>