HTML <form>が1つあります。
フォームにはaction=""
属性が1つだけあります。
ただし、フォームを送信するためにクリックするボタンに応じて、2つの異なるtarget=""
属性が必要です。おそらくこれはちょっとしたJavaScriptコードですが、どこから始めればいいのかわかりません。
それぞれが同じフォームを送信する2つのボタンを作成できますが、各ボタンはフォームに異なるターゲットを与えますか?
フォームには、1つの送信ボタンに関連付けられたデフォルトアクションがあり、次にプレーンボタンにバインドされた代替アクションがあるという考え方で、この問題にアプローチする方が適切です。ここでの違いは、ユーザーが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
が存在し、値がある場合は中止が押されました。この知識を使用して、適切な場所にリダイレクトできます。
このメソッドには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=7517
ボタンの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"
/>
出来上がり。非常に「ファンシー」な3つのWord JavaScript!
シンプルでわかりやすい、これはクリックされたボタンの名前を送信し、その後、あなたがやりたいように分岐します。これにより、2つのターゲットの必要性を減らすことができます。少ないページ...!
<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");
}
?>
サーバー側で実行可能です。
<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) {...}
}
});
ターゲットタイプを変更するフォームを表示する簡単なスクリプトの例を次に示します。
<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 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>
代替ソリューション。 onclick、buttons、server side、およびallを台無しにしないでください。このように異なるアクションで新しいフォームを作成するだけです。
<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では、 getElementsByTagName() を使用して、v()のメインフォームのすべての要素を取得できます。チェックボックスがチェックされているかどうかを知るには
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);
}
各ボタンには次のものがあります。
<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>
これでうまくいくはずです。
これは誰かを助けるかもしれない:
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>
両方のボタンを現在のページに送信してから、このコードを上部に追加します。
<?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を使用して実行することもできます。