0

私はこのフォームを持っており、2つの送信ボタンがあります:

<form method="post" onsubmit="send_mail(this);return false">

    <select name="liste">
     <option value='0'>Choose list</option>
     <option value="1">list1</options>
         <option value="2">list2</options>      
    </select>

<p>Subject: <input type="text" name="subject" /><br />

<div id="editor">
<textarea value="editor1" name="editor1">Some text here</textarea>
</div>

 <input type="submit" value="Sent Mail!" />
 <div id="testmail">
     <p><input type="button" onsubmit="send_Testmail(this);return false" value="Sent Test" />
     To: <input type="text" name="testemail" /><br />
</div>
</form>

ご覧のとおり、フォームには次のjavascript関数があります。onsubmit="send_mail(this);return false

これは次のようになります:

function send_mail(form) {
   jQuery.post('editor.php', jQuery(form).serialize(), function(data) {
   jQuery('#center').html(data);
});
    }

このスクリプトは、フォームデータをeditor.phpスクリプトに送信します。このスクリプトは、メールを処理して送信し、「emailsend」を返します。スクリプトは、<div>を、<form>このreturnステートメントに置き換えます。これは私が望んでいたように機能しています。

次に、別のボタンと入力テキストボックスを作成して、ユーザーがメールを入力し、上記のフォームのテストを送信してから送信できるようにします。

これどうやってするの?問題は、2ボタンがフォームタグに添付されているため、常にjavascriptsend_mailを送信することonsubmitです。

これはおそらく基本的な質問です。誰かが私を正しい方向に向けてくれることを願っています。

編集/更新:

明確にするために:最初のボタンは$ postを私のeditor.phpファイルに送信する必要があり、javascriptはフォーム全体を保持するdivを置き換えます。2番目のボタンは$postをtestmail.phpファイルに送信し、このボタンを保持するdivと入力テキストフィールド(IDは「testmail」)のみを置き換える必要があります。

それが理にかなっていることを願っています..そして助けてくれてありがとう。

4

2 に答える 2

3

あなたのJavaScriptは最高ではありません。あなたがそうであるように(例えばonsubmit属性で)それをインラインで使用するべきではありません。代わりに、JavaScriptがユーザーのブラウザで有効になっていない場合でもフォームが機能するように、目立たないようにする必要があります。その例:

<form action="editor.php" method="post" id="contact-form">
  <div>
    <label for="to">To:</label>
    <input type="text" name="to" id="to" />
  </div>
  <div>
    <label for="subject">Subject:</label>
    <input type="text" name="subject" id="subject" />
  </div>
  <div>
    <label for="message">Message:</label>
    <textarea name="message" id="message"></textarea>
  </div>
  <div>
    <input type="submit" name="send" value="Send" />
  </div>
</form>
<div id="response"></div>
<script src="jquery.js"></script>
<script>
    $(document).ready(function() {
        $('#contact-form').submit(function() {
            var action = $(this).attr('action');
            var data = $(this).serialize();
            $.post(action, data, function(response) {
                $('#response').html(response);
            });
            return false;
        });
    });
</script>

上記では、JavaScriptが利用できない場合でもフォームがeditor.phpに送信されますが、JavaScriptが利用可能な場合、JavaScriptブロックがフォーム送信を取得し、代わりにeditor.phpにリダイレクトするのではなくAJAXを使用して投稿します。

テストメールも送信したい場合は、名前の代わりにチェックボックスを含めます。チェックボックスがオンになっている場合は、まったく異なるスクリプトではなくtest、フォームハンドラー(この場合はeditor.php )のロジックを変更します。最も単純な場合、次のようになります。

<?php
$to = $_POST['to'];
$subject = $_POST['subject'];
$message = $_POST['message'];

if (isset($_POST['test'])) {
    // do something
    // maybe set $to to something different
}

if (mail($to, $subject, $message)) {
    echo 'Sent';
}
else {
    echo 'Not sent';
}
于 2012-08-12T15:58:48.077 に答える
1

なぜあなたはajaxの投稿をしてフォームを提出する必要があるのですか?どちらかを実行します。

2つの通常のボタンがあり、を介して好きなことを実行しますS.post

<form>
 <div id="testmail">
     <p><input type="button" onsubmit="send_Testmail(this);return false" value="Sent Test" />
     To: <input type="text" name="testemail" /><br />
</div>
<input type="button" id="button1" value="Send Mail!" />
</form>

$('#button1").click(function(form) {
   $.post('editor.php', $(form).serialize(), function(data) {
   $('#center').html(data);
   });
});
于 2012-08-12T15:46:01.427 に答える