2017-02-23 9 views
2

:私はすべてのブラウザでこのページを開くと、要素を検査する場合<table>タグに埋め込まれたHTMLフォームが正しく表示されませんか?私は、単純なHTMLフォーム以下のいる

<html> 
<head> 
</head> 
<body> 
    <table border="0" cellpadding="2" cellspacing="0" width="400"> 
     <form name="logon" method="post" id="logon" action="take.php"> 
      <tr> 
       <td tabindex="0">User ID </td> 
       <td> 
         <input name="login" maxlength="12" size="15" value="" title="User ID"> 
       </td> 
       <td class="loginlabel">&nbsp;</td> 
      </tr> 

      <tr> 
       <td tabindex="0">Password </td> 
       <td> 
         <input type="password" name="password" maxlength="12" size="15" value=""> 
       </td> 
       <td class="lable">&nbsp;</td> 
      </tr> 

      <tr> 
       <td colspan="3"> 
        <p class="pushButton"><button type="submit" form="nameform" value="Submit">Submit</button></p> 
       </td> 
      </tr> 

     </form> 
    </table> 
</body> 
</html> 

、私は、HTMLフォームの奇妙な構造を発見しました。私は、この背後にある理由は何ですか、HTMLフォーム検査のスクリーンショットを見つけてください Image of HTML form inspection embedded in <table> tag

、開始直後に閉じ<form>タグを見つけましたか?

答えて

1

、あなたは別のタグ内のタグを開くと、開いたタグ(あなたのケースでは<form>タグ)は、その親が閉じられたときにclsoedになります。したがって、(例えば)

<p><form></p> 
<p></form></p> 

は以下になります:

<p><form></form></p> 
<p></p> 

これである理由は、(とりわけHTMLに国際基準を設定する)W3Cによると、フォーム要素を使用できる唯一のコンテキストは、flow contentです。例えば、文書やアプリケーションの本体で使用されているほとんどの要素であるコンテンツをフロー: Flow content


これを解決するには、テーブルを包む、テーブルの上にフォームタグを配置することです明確にするために

<form> 
    <table> 
    </table> 
</form> 

:以下のようにフォーム
テーブルフォームタグの中にであることを確認する必要があります。以下の作業として、完全な例を参照してください。

<html> 

    <head> 
    </head> 

    <body> 
    <form name="logon" method="post" id="logon" action="take.php"> 
     <table border="0" cellpadding="2" cellspacing="0" width="400"> 
     <tr> 
      <td tabindex="0">User ID </td> 
      <td> 
      <input name="login" maxlength="12" size="15" value="" title="User ID"> 
      </td> 
      <td class="loginlabel">&nbsp;</td> 
     </tr> 

     <tr> 
      <td tabindex="0">Password </td> 
      <td> 
      <input type="password" name="password" maxlength="12" size="15" value=""> 
      </td> 
      <td class="lable">&nbsp;</td> 
     </tr> 

     <tr> 
      <td colspan="3"> 
      <p class="pushButton"> 
       <button type="submit" form="nameform" value="Submit">Submit</button> 
      </p> 
      </td> 
     </tr> 
     </table> 
    </form> 
    </body> 

</html> 

Chromeで検査機能を使用すると、ブラウザへの出力は、フォームタグの中にネストされたテーブルが表示されていることを証明している:
Updated inspect


はお気軽にそれ以上の質問をする。

+0

私の場合、 'form>'の親タグはどこに閉じられていますか? '

'が閉鎖される直前に閉じられているので、どうして私の場合は問題になりますか? – BSalunke

+0

''の親タグは '

'です(フォームは表の中にネストされています)。エラーを修正するには、これらのロールを 'スワップ'して ''の中に '
'を入れ子にする必要があります。私は少し明確にするために私の元の答えを更新しました。 –

+0

まだ私の質問はなぜですか? ''で '

'タグを指定するのはなぜ必須ですか?リバースが正しく機能しないのはなぜですか? – BSalunke

0
は、フォームの内側 tableタグを移動し

:このため

<form name="logon" method="post" id="logon" action="take.php"> 
    <table border="0" cellpadding="2" cellspacing="0" width="400"> 
      <tr> 
       <td tabindex="0">User ID </td> 
       <td> 
         <input name="login" maxlength="12" size="15" value="" title="User ID"> 
       </td> 
       <td class="loginlabel">&nbsp;</td> 
      </tr> 

      <tr> 
       <td tabindex="0">Password </td> 
       <td> 
         <input type="password" name="password" maxlength="12" size="15" value=""> 
       </td> 
       <td class="lable">&nbsp;</td> 
      </tr> 

      <tr> 
       <td colspan="3"> 
        <p class="pushButton"><button type="submit" form="nameform" value="Submit">Submit</button></p> 
       </td> 
      </tr> 

    </table> 
</form> 

理由はただその中tableタグのないtrタグがあるなぜフォームが不確かであることが考えられます。それは奇妙な制限だと思われるかもしれませんが、他の誰かがさらに明確にすることができます。

0

あなたはこの持っている:あなたが最初のフォームして、テーブルを宣言する必要が

<table border="0" cellpadding="2" cellspacing="0" width="400"> 
    <form name="logon" method="post" id="logon" action="take.php"> 

<form name="logon" method="post" id="logon" action="take.php"> 
<table border="0" cellpadding="2" cellspacing="0" width="400"> 
     <tr> 
      <td tabindex="0">User ID </td> 
      <td> 
        <input name="login" maxlength="12" size="15" value="" title="User ID"> 
      </td> 
      <td class="loginlabel">&nbsp;</td> 
     </tr> 

     <tr> 
      <td tabindex="0">Password </td> 
      <td> 
        <input type="password" name="password" maxlength="12" size="15" value=""> 
      </td> 
      <td class="lable">&nbsp;</td> 
     </tr> 

     <tr> 
      <td colspan="3"> 
       <p class="pushButton"><button type="submit" form="nameform" value="Submit">Submit</button></p> 
      </td> 
     </tr> 

HTMLで

+0

しかし、なぜ表内のフォームの宣言が機能していないのですか? – BSalunke

+0

フォームがあり、そのフォームの中にログインテーブルがあります。現代の一日の例を使うことができます...あなたはあなたのベッドの中に入るのではなく、あなたの中のベッドに入るのです! :D –

関連する問題