dポイントプレゼントキャンペーン実施中!

http://www.ajaxmail.jp/のAjaxmailを使用いたしております。リンクをクリックするとメールフォームがポップアップで表示されるのですが、このフォームのスクリプトに対して最初のリンクのクリックと同時にPOSTでデータを送りたいと思っておりますがうまく行きません。

ソースは以下


<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<title>AjaxMail:Ajaxを活用したフリーPHPメールフォーム</title>
<link rel="stylesheet" type="text/css" href="css/lightview.css" />
<script type="text/javascript" src="js/protoculous-effects-packer.js"></script>
<script type="text/javascript" src="js/lightview.js"></script>
</head>

<body>

<div style="margin:200px">

<form name="form1" action="http://xxxx.com/ajaxmail-utf-8/ajaxmail/sample.p … method="post">
<input type="hidden" name="str" value="xxxx@xxxx.xx.xx">
</form>

<a href='JavaScript:document.form1.submit()' rel='iframe' title='送信フォームタイトル :: 送信フォーム説明文 :: width: 750, height: 600' class='lightview'>text1</a>
</form>

フォームをポップアップさせるJavaScriptとPOSTを制御するJavaScriptとの組み合わせの仕方がよくわかりません。

恐れ入りますがどなたかご教授頂けると幸いです

A 回答 (7件)

===続き===


<p><strong>内容</strong><br />
<textarea cols="50" rows="10" name="内容" id="内容">
</textarea>
</p>
<p><input type="submit" value="確認する"></p>
</form>
<script type="text/javascript" language="javascript">
function ajax_popup(no){
var form_data,Kanrisya_Mail;
switch(no){
case 1:
Kanrisya_Mail="hogehoge1@fuga.fuga";
form_data="1";
break;
case 2:
Kanrisya_Mail="hogehoge2@fuga.fuga";
form_data="2";
break;
case 3:
Kanrisya_Mail="hogehoge3@fuga.fuga";
form_data="3";
break;
default:
Kanrisya_Mail="";
form_data="";
break;
}
document.getElementById("E-mail").value=Kanrisya_Mail;
document.getElementById("内容").value=form_data;
Lightview.show({href:'#ajaxForm',rel:'inline',title:"送信フォーム",
options:{autosize:true,topclose:true}});
document.observe('lightview:opened',function(){
new Spry.Widget.ValidationTextField("checkText1", "none", {validateOn:["change"]});
new Spry.Widget.ValidationTextField("checkText2", "email",{validateOn:["change"]});
});
}
function ajaxsend(){
var form_data={"E-mail":document.getElementById("E-mail").value,
"内容":document.getElementById("内容").value};
Lightview.show({href:'./ajaxmail/sendmail.php',rel:'ajax',
options:{autosize: true,topclose:true,ajax:{parameters:form_data,}}
});
}
</script>
</body>
</html>
    • good
    • 0

一応、test.phpだけですむように、試して見ましたが、lightviewに


限界がありました。どうしても3回目のポップアップで、lightview
がエラーを吐いてしまい、最初のフォームのポップアップに戻せません。
このへんで、妥協するしかないかも...。
sendmail.phpの
// 送信確認画面の表示(する=1, しない=0)
$chmail = 0;
// 送信後に自動的にジャンプする(する=1, しない=0)
// 0にすると、送信終了画面が表示されます。
$jpage = 0;
にします。
test.phpは
<?php
mb_language("japanese");
mb_internal_encoding("UTF-8");
header("Content-Type:text/html;charset=utf-8");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dt …
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<title>PopupForm</title>
<link rel="stylesheet" type="text/css" href="css/lightview.css" />
<link rel="stylesheet" href="./ajaxmail/SpryValidationTextField.css" type="text/css" media="all">
<script type="text/javascript" src="js/protoculous-effects-packer.js"></script>
<script type="text/javascript" src="js/lightview.js"></script>
<script src="./ajaxmail/SpryValidationTextField.js" type="text/javascript"></script>
<script type="text/javascript" language="javascript">
</script>
</head>
<body>
<?php
/*
DB読み込み処理??
*/
?>
<ul>
<li>物件1<input type="button" value="問い合わせ" onclick="ajax_popup(1);"></li>
<li>物件2<input type="button" value="問い合わせ" onclick="ajax_popup(2);"></li>
<li>物件3<input type="button" value="問い合わせ" onclick="ajax_popup(3);"></li>
</ul>
<form style="display:none;" id="ajaxForm" method="POST" action="javascript:ajaxsend()">
<p id="checkText1">
<strong>お名前</strong><br /><input type="text" size="40" name="お名前" id="お名前">
<span class="textfieldRequiredMsg">お名前が未入力です</span>
</p>
<p id="checkText2">
<strong>E-mail</strong><br />
<input type="text" size="40" name="E-mail" id="E-mail" value="">
<span class="textfieldRequiredMsg">メールアドレスが未入力です</span>
<span class="textfieldInvalidFormatMsg">メールアドレスをご記入ください</span>
</p>
===続く===
    • good
    • 0

<フォームの確認ボタンを押して確認画面表示→送信ボタン→送信確認画面まで全てポップアップ内で遷移して欲しい>


となると、「ポップアップ内で遷移して欲しい」=「ページ遷移させない」という
事だから、sample.phpでsendmail.phpにサブミットするのでなくここでもajaxリク
エストを使うことになり、ややこしくなります。そもそもsample.phpを介在する
必用はないので、test.phpだけですむようざくっと作り変えた方が楽です。
No.2でちらっと書きましたが、Lightviewのinlineオプション使えば、ページ
内のフォームもポップアップできます。フォームを初期状態で」display:none;
にしておいて、ポップアップ時に表示して、sendmail.phpとajaxすればよいかな。
    • good
    • 0
この回答へのお礼

ありがとうございます。むむむ。当方初心者なのでsample.phpを介在しないでとなるとハードルが高そうです。。そもそもsample.phpとsendmail.php間の動きも良くわかってないしまつなので。Lightviewのinlineオプションについても検索してみましたがなかなかわかり良い情報も無く。挫折しそうです。勝手なお願いばかりで恐縮なのですがサンプルソースでヒントを頂けると大変ありがたいですが如何でしょう。自分でも引き続き勉強してみますがお手つきの時で結構ですのでご検討を。

お礼日時:2010/05/11 23:15

続き


<form id="ajaxForm" method="POST" action="./ajaxmail/sendmail.php">
<p id="checkText1">
<strong>お名前</strong><br /><input type="text" size="40" name="お名前" id="お名前">
<span class="textfieldRequiredMsg">お名前が未入力です</span>
</p>
<p id="checkText2">
<strong>E-mail</strong><br />
<input type="text" size="40" name="E-mail" id="E-mail" value="<?php echo $_POST['Kanrisya_Mail'] ?>">
<span class="textfieldRequiredMsg">メールアドレスが未入力です</span>
<span class="textfieldInvalidFormatMsg">メールアドレスをご記入ください</span>
</p>
<p><strong>内容</strong><br /><textarea cols="50" rows="10" name="内容" id="内容">
<?php echo $_POST['Bukken_ID'] ?>
</textarea>
</p>
<p><input type="submit" value="確認する"></p>
</form>
</body>
</html>

※スクリプトやCSSやPHPのパスは適切にしてください。
※sendmail.phpのカストマイズもお忘れなく

この回答への補足

回答ありがとうございます。早速試しました。
test.phpのボタンをクリックするとフォームがポップアップして、データも同時に受け渡されているのは確認できたのですが、フォーム内の確認ボタンを押すとlightviewのポップアップが解けてしまい画面がtest.phpから遷移して確認画面が表示されてしまいます。
確認画面の送信ボタンを押してSendmail.phpからメールを送信することができましたので惜しいところまできていると思うのですが。。
希望としてはフォームの確認ボタンを押して確認画面表示→送信ボタン→送信確認画面まで全てポップアップ内で遷移して欲しいと思っております。
最初の要望説明が十分でなかったのが悪かったかもしれませんが引き続きご教授お願いできれば幸いです。

補足日時:2010/05/08 00:40
    • good
    • 0

続き



/*
DB読み込み処理??
*/
?>
<ul>
<li>物件1<input type="button" value="問い合わせ" onclick="ajax_popup(1);"></li>
<li>物件2<input type="button" value="問い合わせ" onclick="ajax_popup(2);"></li>
<li>物件3<input type="button" value="問い合わせ" onclick="ajax_popup(3);"></li>
</ul>
<script type="text/javascript" language="javascript">
function ajax_popup(no){
var form_data;
if(no=="1") form_data={"Bukken_ID":1,Kanrisya_Mail:"hogehoge@fuga.fuga"};
if(no=="2") form_data={"Bukken_ID":1,Kanrisya_Mail:"hogehoge@fuga.fuga"};
if(no=="3") form_data={"Bukken_ID":1,Kanrisya_Mail:"hogehoge@fuga.fuga"};
Lightview.show({href:'./sample.php',rel:'ajax',
options:{autosize: true,topclose:true,
ajax:{
parameters:form_data,
onComplete: function(){
new Spry.Widget.ValidationTextField("checkText1", "none", {validateOn:["change"]});
new Spry.Widget.ValidationTextField("checkText2", "email",{validateOn:["change"]});
//$('ajaxForm').observe('submit',function(){});
}
}
}
});
}
</script>
</body>
</html>

次にsample.phpの方
<?php
mb_language("japanese");
mb_internal_encoding("UTF-8");
header("Content-Type:text/html;charset=utf-8");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dt …
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<title>Form</title>
</head>
続く
    • good
    • 0

質問がだいたい解りました。

ajaxmail.phpの呼び方というより、Lightview.jsによる
ポップアップの手段と、SpryValidationTextField.jsによる事前チェックするのが肝ですね。
サンプルだとLightviewがiframeになっているからやりずらい気がします。Lightviewは
ajax呼び出しも出来るから、ご希望のようにするにはajaxオプションを使いましょう。
(※inlineオプション使えば、sample.phpに別投げしなくても、test.phpのみでもでき るけれど、ごきぼうどおりのやり方でサンプル作ってみました)
まず、test.phpの方
(回答投稿文字数オーバーになるので続きます)
<?php
mb_language("japanese");
mb_internal_encoding("UTF-8");
header("Content-Type:text/html;charset=utf-8");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dt …
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<title>PopupForm</title>
<link rel="stylesheet" type="text/css" href="css/lightview.css" />
<script type="text/javascript" src="js/protoculous-effects-packer.js"></script>
<script type="text/javascript" src="js/lightview.js"></script>
<link rel="stylesheet" href="./ajaxmail/SpryValidationTextField.css" type="text/css" media="all">
<script src="./ajaxmail/SpryValidationTextField.js" type="text/javascript"></script>
</head>
<body>
<?php
/*
DB読み込み処理??
*/
続く.....
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございました。途中の回答No3がサイト都合で見れないため回答頂いた内容については試せておりませんが取り急ぎお礼申し上げます。

お礼日時:2010/05/07 23:03

恐れ入りますが、質問の文面からなされたい事がさっぱり汲み取れません。


-リンクをクリックしたら同じページにあるメールフォームをポップアップしたいのですか?
-リンクをクリックしたらメールフォームをポップアップせずに送信したいのですか?
 その場合、メールの宛先とか本文はどうするのですか?

この回答への補足

回答ありがとうございます。わかりづらく失礼しました。うまく説明できるか不安ですが。
やりたい事は以下になります。
物件検索サイトを構築したい。DBからのデータを検索結果画面で表示させる画面(test.php)があるとします。このページに検索結果として表示された個々の物件毎に”問合せ”ボタンがあり、ユーザが問合せをしたい場合にボタンをクリックするとAjaxmailのメールフォームがポップアップ(sample.php)し、サイトのユーザが質問内容や自分の連絡先をフォームに入力して送信するような形を取ろうとしております。その際ユーザが個々の物件を特定する情報(物件IDや物件を管理している管理者のメールの宛先情報等)をいちいち入力することなく各物件の管理者がどの物件の問合せか特定出来る様にする目的で送りたいと思っております。
その方法として画面1でDBより取得した物件IDおよびメールアドレス等の変数情報をPOSTで画面2のフォームに送り込み、そのままユーザには見せない形で管理者にメールできるように出来ないかと考えております。
流れとして
 1)test.phpでDBより管理者メールアドレスと物件ID情報を取得
 2)test.phpの画面上のボタンを押すとメールフォームが立ち上がる(sample.php)。その際に同時に物件IDとメールアレス情報をsample.phpにPOST
 3)sample.phpのメールフォームにユーザが入力し"submit"すると2)でPOSTされた情報と併せてsample.phpに連携したsendmail.jsのスクリプトがメールを送る

という動きを想定してます。
1)および3)についてはテストスクリプトでうまく動作できたのですが、2)の動作の部分でつまずいているという次第です。

補足日時:2010/05/06 23:58
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!