0

さて、いくつかのチュートリアルと HTML5 に関する本を読んだことがあります。この本では、フォーム コントロールとその変更点について多くのことが書かれています。そこで、このサンプル コードを使用してコードをテストしてみました。私がやりたいことは、フォーム データ (具体的には、誰かがカウントダウンしたいイベントの名前のテキスト フィールドと、イベントの日付と時刻の日時コントロール) を JavaScript の他の HTML5 ファイルに送信することです。解析するファイル。問題?フォーム アクションとして指定されたファイルにデータが送信されていません。

フォームを含む HTML ファイルのコード (countdown_form.html) は次のとおりです。

<!DOCTYPE html>
<html>
  <head>
    <title>Collecting countdown data</title>
  </head>
  <body>
    <form method="post" action="countdown.html">
      <table border="1" cellpadding="5">
        <tr>
          <td>Name of event to count down to</td>
          <td><input name="event" type="text"></td>
        </tr>
        <tr>
          <td>Date of event to count down to</td>
          <td><input name="date" type="datetime"></td>
        </tr>
      </table>
      <input name="Submit" type="submit">
    </form>
  </body>
</html>

そして、フォームデータを送信しようとしているHTMLファイルのコード(countdown.html)は次のとおりです。

<!DOCTYPE html>
<html>
  <head>
    <title>
      <script type="text/javascript">
      document.write("Countdown to " + input.text);
      </script>
    </title>
  </head>
  <body>
    <table border="1" cellpadding="5">
      <tr>
        <td>
          <script type="text/javascript" language="JavaScript">
            <!--
            document.write("Time left until " + input.text);
            //-->
          </script>
        </td>
      </tr>
      <tr>
        <td>
          <SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript">
          <!--

          dateFuture = new Date(input.date);

          function GetCount(){

             dateNow = new Date();                                                                        //grab current date
             amount = dateFuture.getTime() - dateNow.getTime();                //calc milliseconds between dates
             delete dateNow;

             // time is already past
             if(amount < 0){
                document.getElementById('countbox').innerHTML="Now!";
             }
             // date is still good
             else{
                days=0;hours=0;mins=0;secs=0;out="";

                amount = Math.floor(amount/1000);//kill the "milliseconds" so just secs

                days=Math.floor(amount/86400);//days
                amount=amount%86400;

                hours=Math.floor(amount/3600);//hours
                amount=amount%3600;

                mins=Math.floor(amount/60);//minutes
                amount=amount%60;

                secs=Math.floor(amount);//seconds

                if(days != 0){out += days +" day"+((days!=1)?"s":"")+", ";}
                if(days != 0 || hours != 0){out += hours +" hour"+((hours!=1)?"s":"")+", ";}
                if(days != 0 || hours != 0 || mins != 0){out += mins +" minute"+((mins!=1)?"s":"")+", ";}
                out += secs +" seconds";
                document.getElementById('countbox').innerHTML=out;

                setTimeout("GetCount()", 1000);
             }
          }

          window.onload=function(){ 
             GetCount(); 
          }; //call when everything has loaded
          //-->
          </script>
          <div id="countbox"></div>
        </td>
      </tr>
    </table>
  </body>
</html>

私が知りたいのは:

  1. ある HTML ドキュメントから別の HTML ドキュメントにフォーム データを直接送信することは合法ですか?
  2. 合法である場合、<input> タグからのデータがアクション ドキュメント内の input.text および input.datetime JavaScript 変数によって解析されないのはなぜですか?

また、

  1. <title> タグ内に JavaScript コードを含めることは合法ですか?
  2. 合法である場合、Google Chrome がコードを解析しないのはなぜですか?

そして、これら 2 つのことのどちらも正当でない場合、フォーム データを次のように正確に使用するにはどうすればよいでしょうか。

  1. ドキュメントのタイトル。
  2. JavaScript が解析するデータとして?
4

1 に答える 1

4

これを行いたい場合は、method=post の代わりにmethod=getを使用することをお勧めします。そうすれば、ターゲット ページの Javascript がパラメータを認識できるようになります。JS は投稿パラメーターを認識できません (それらにアクセスするには、PHP、ASP.NET などを実行する Web サーバーが必要です)。

質問に明確に答えるには:

  1. 送信しても問題ありませんが、ブラウザはターゲット ページのパラメータを認識できません。
  2. いいえ、Javascript を使用することは合法ではありません。ただし、これを使用して Javascript からタイトルを設定できます。 document.title = "Some text";
  3. サーバー側のスクリプト言語を使用するか、クライアント側でこれを行う必要がある場合は、フォームで method="get" を使用し、window.location.searchを使用してターゲット ページのパラメーターを解析します。
于 2012-05-30T04:37:30.253 に答える