表单元素过早关闭

时间:2013-07-30 21:38:52

标签: php html

我有一个PHP脚本,它生成一个表,每行(据说)作为一个表单。该表生成得非常好,但由于某种原因,表单标签立即关闭。我不明白为什么,它让我的胡思乱想。有什么想法吗?

echo '
 <form method="post" action="#" id="status_row_'.$row["name"].'">
 <tr class="even">
      <input type="hidden" name="category" id="category" value="'.$category[0]['category'].'">
      <input type="hidden" name="error_level" id="error_level" value="'.$row['level'].'">
      <input type="hidden" name="service_name" id="service_name" value="'.$row['name'].'">
      <td class="status-icons" name="error_circle"><div class="'.$error_circle.'"></div></td>
          //rows deleted here for clarity's sake
                                    </tr></form>'

因此,生成的表单上的Inspect Element显示:<form method="post" action="#" id="status_row_blahblah"></form>后跟所有行。

4 个答案:

答案 0 :(得分:4)

你的HTML坏了。您正在尝试在开始<tr>后立即打开表单,然后在结束<tr>之后关闭它。这是非法的HTML。 <table>结构不能像那样构建。它应该更像是

<form>
<table>
<tr>
   <td>...</td>
</tr>
</table>
</form>

基本上,您尝试将表单填充到<tr><td>标记之间存在的空白中。除了表结构之外,什么都不应该存在:

<tr><p>hi there</p><td>go away</td></tr>

是非法的,大多数浏览器会将<p>显示在表外,通常在打开<table>标记之前。这就是为什么你的表单出现在原来的位置 - 浏览器正试图用你破碎的html做到最好。

答案 1 :(得分:1)

表格有何不同?或者以某种方式链接在一起(即,每个表格行是它自己的独特形式,还是一个巨大的形式,每行都有不同的字段?

如果是前者,那么在每个ROW元素中创建一个表单,如下所示:

<table>
    <tr>
       <td><form>FORM STUFF GOES HERE</FORM></td>
    </tr>
    <tr>
       <td><form>FORM STUFF GOES HERE</FORM></td>
    </tr>
    <tr>
       <td><form>FORM STUFF GOES HERE</FORM></td>
    </tr>
</table>

如果是后者,或者您只需要整体提交一个表单,那么在表格外创建表单标签,并在数据单元格中包含表单字段:

<form>
<table>
    <tr>
        <td>FORM FIELD E.G. TEXT FIELD</td>
    </tr>
    <tr>
        <td>FORM FIELD E.G. TEXT FIELD</td>
    </tr>
    <tr>
        <td>FORM FIELD E.G. TEXT FIELD</td>
    </tr>
</table>
</form>

答案 2 :(得分:0)

在关闭<tr>代码之前,您似乎正在关闭<form>代码。

答案 3 :(得分:0)

表单元素关闭不正确,因为正如有些人所指出的那样,你显然在<form><tr>标签之间没有<td>个标签(我不明白为什么,但它就是这样。)

我发现这个解决方案是一种解决方法:

http://federmanscripts.com/2010/01/12/form-and-table-row-nesting-workaround/