2つのjavascriptを組み合わせたい
フォームメール用の2つのjavascriptがあります。
●2重送信防止とデータ送信後指定ページへ遷移するjavascript
●テキストボックスが空欄だった時にアラートを表示するjavascript
の2つです。
この2つを組み合わせようとしたのですが、うまく動きません。
ご指導いただきたくお願いいたします。
***************************************************
【●2重送信防止とデータ送信後指定ページへ遷移するjavascript】【動きます】
送信ボタン押下後、2重送信を防止しながら、データ送信後は「location.href = "finish.html"」でfinish.htmlを表示します。
<script type="text/javascript" src="js/jquery.js"></script>
<script>
jQuery(function($) {
$('#form1').submit(function(event) {
// HTML送信キャンセル
event.preventDefault();
//フォーム要素取得
var $form = $(this);
// 送信ボタンを取得
// (後で使う: 二重送信防止)
var $button = $form.find('button');
// 送信
$.ajax({
url: $form.attr('action'),
type: $form.attr('method'),
data: $form.serialize()
+ '&delay=1',
timeout: 10000,
// 送信前
beforeSend: function(xhr, settings) {
// ボタン無効二重送信防止
$button.attr('disabled', true);
},
// 応答後
complete: function(xhr, textStatus) {
// ボタン有効再送信許可
$button.attr('disabled', false);
},
// 通信成功処理
success: function(result, textStatus, xhr) {
// 入力値初期化
$form[0].reset();
location.href = "finish.html";
},
// 通信失敗処理
error: function(xhr, textStatus, error) {
alert('retry');}
});
});
});
</script>
<form name="form1" id="form1" method="POST" name="form1" action="insert.php">
<input type="text" name="tel" value="" />
<input type="text" name="fax" value="" />
<input type="submit" value="送信A">
</form>
***************************************************
【●テキストボックスが空欄だった時にアラートを表示するjavascript】【動きます】
テキストボックスが空欄だったらアラートを表示します。
<script>
function check3() {
var tel3 = document.form1.tel.value;
var fax3 = document.form1.fax.value;
var isValid = true;
if (!tel3) {
alert("電話未入力");
isValid = false;
}
if (!fax3) {
alert("FAX未入力");
isValid = false;
}
if (!isValid) {
return;
}
document.form1.submit();
}
</script>
<form name="form1" id="form1" method="POST" name="form1" action="insert.php">
<input type="text" name="tel" value="" />
<input type="text" name="fax" value="" />
<input type="submit" value="送信B" onclick="check3();">
</form>
***************************************************
【上記の2つを組み合わせてみました。】【動きません】
テキストボックスが空欄だったらアラートを表示しながら2重ボタン排除&finish.htmlに遷移というものです。
【結果】
「問題なく動くjavascript」2つを単純に組み合わせただけなのですが、
finish.htmlに遷移せずinsert.phpが表示されます。ご指導宜しくお願いします。
<script type="text/javascript" src="js/jquery.js"></script>
<script>
jQuery(function($) {
$('#form1').submit(function(event) {
event.preventDefault();
var $form = $(this);
var $button = $form.find('button');
$.ajax({
url: $form.attr('action'),
type: $form.attr('method'),
data: $form.serialize()
+ '&delay=1',
timeout: 10000,
beforeSend: function(xhr, settings) {
$button.attr('disabled', true);
},
complete: function(xhr, textStatus) {
$button.attr('disabled', false);
},
success: function(result, textStatus, xhr) {
$form[0].reset();
location.href = "finish.html";
},
error: function(xhr, textStatus, error) {
alert('retry');}
});
});
});
</script>
<script>
function check3() {
var tel3 = document.form1.tel.value;
var fax3 = document.form1.fax.value;
var isValid = true;
if (!tel3) {
alert("電話未入力");
isValid = false;
}
if (!fax3) {
alert("FAX未入力");
isValid = false;
}
if (!isValid) {
return;
}
document.form1.submit();
}
</script>
<form name="form1" id="form1" method="POST" name="form1" action="insert.php">
<input type="text" name="tel" value="" />
<input type="text" name="fax" value="" />
<input type="submit" value="送信B" onclick="check3();">
</form>
補足
やはり、AJAXでやるしかないですか。 formの送信データをrequest.send("value="+document.getElementById("text"));のような形で送っていけば 確かにできそうですが、一度に送る内容が増えてくると徐々にプログラムの見た目が汚くなるのがどうも(汗。 ・【出力形式がoutput=xmlで出力形式を変えるとか】 こちらに関しては私の知識不足のためよく分からなかったのですが、responseXMLとは別物なんでしょうか? レスポンスがhtmlだと困るというというよりはサーバー側で複数の処理に対してecho "----";と書き出すと、 どの結果がどの処理結果であるのかが分かりにくくなり、それを避けようと処理項目ごとに別プログラムにすると PHPファイルが無駄に増えそうという意味でした。 説明不足でしたら済みません。 ・【埋め込みフレーム】 確かに別ウィンドウ開いて親ウィンドウ制御して、別ウィンドウを 閉じるといった方法とかも良いのですが、この場合にも データの送信方法がwindow.open('yyy.php?x=x')みたいな形になって、 送信する物が多くなればなるほど指定を増やさないといけないのが大変そうで。 <form action="PHP">とした時に処理だけ指定先で、結果を反映するのは自身であるような方法があれば最高なのですが、 そんな都合の良い方法は無いでしょうか・・・。 後あまりajaxとかに詳しくないので、このようなごまかし?(orテクニック?)が色々出ているサイトがあれば 教えて欲しいですm(_ _)m ・【アナログに送信】 <form action="自分.php">という形で自身に送信するとリロード されてしまって、google map等だとsubmitボタンを押したときに 結果が反映されないのが困るんですよねー(>_<;)