42

送信ボタンをクリックすると、フォームが表示されます。

  1. 同じファイルでいくつかのタスクを実行したい (db タスク) AND
  2. リダイレクトでフォームデータをtest.phpに送信したい

ここに私のコードがあります

    <?php
    if(isset($_POST['btn'])){
        //do some task
    ?>
    <script type="text/javascript">
        var e = document.getElementById('testForm'); e.action='test.php'; e.submit();</script>
    <?php
    }
    ?>
<form name="testForm" id="testForm"  method="POST"  >
    <input type="submit" name="btn" value="submit" autofocus  onclick="return true;"/>
 </form>

しかし、フォームを送信できません。onClick で JavaScript コードを呼び出すと、機能します。このコードの問題は何ですか。これに対する回避策はありますか

4

4 に答える 4

73

if 関数内で JavaScript をエコーアウトするだけです

 <form name="testForm" id="testForm"  method="POST"  >
     <input type="submit" name="btn" value="submit" autofocus  onclick="return true;"/>
 </form>
 <?php
    if(isset($_POST['btn'])){
        echo "
            <script type=\"text/javascript\">
            var e = document.getElementById('testForm'); e.action='test.php'; e.submit();
            </script>
        ";
     }
  ?>
于 2012-05-15T07:45:29.490 に答える
6

このようにすべての JS を配置できるため、HTML の準備が整う前に実行されません。

$(document).ready(function() {
   // some code here
 });

これは jQuery であるため、head セクションに含めます。onload ではなく jQuery を使用する理由も参照してください。

于 2012-05-15T07:50:37.850 に答える
5

スクリプトの実行時には、DOM が完全にロードされていないため、ボタンは存在しません。最も簡単な解決策は、フォームの後にスクリプト ブロックを配置することです。

window.onloadもう 1 つの解決策は、イベントをキャプチャするか、 jQuery ライブラリを使用することです (この JavaScript が 1 つしかない場合はやり過ぎです)。

于 2012-05-15T07:42:02.777 に答える