【问题标题】:jQuery serialize method returns nulljQuery 序列化方法返回 null
【发布时间】:2022-01-13 13:28:19
【问题描述】:

我正在尝试使用 jQuery 提交表单,但 serialize 方法返回 null。怎么了?非常感谢您的帮助。

这是我的代码。

HTML / PHP 代码

<TR>
    <FORM id="frmUnitDetails<?php echo $ctr;?>" name="frmUnitDetails<?php echo $ctr;?>" action="./getServPersonsStatsUnit.php" method="post" target="_blank">
    <TD align="center" width="300px">
        <label id="unit<?php echo $ctr;?>" for="unit<?php echo $ctr;?>"><?php echo $row["UNIT"];?></label>
        <input type="hidden" id="unit<?php echo $ctr;?>" name="unit<?php echo $ctr;?>" value="<?php echo $row["UNIT"];?>">
        <input type="hidden" id="month<?php echo $ctr;?>" name="month<?php echo $ctr;?>" value="<?php echo $date;?>">
        <br>
        <INPUT id="showDetails" name="showDetails" type="submit" value="Show Details" onclick="submitFrm('frmUnitDetails<?php echo $ctr;?>')">
    </TD>
    <TD align="right">
        <INPUT type="text" id="ele<?php echo $ctr;?>" name="ele<?php echo $ctr;?>" value="<?php echo $row["ELECT_STAFF"];?>" style="text-align:right;" size="3" readonly="readonly">
    </TD>
    <TD align="right">
        <INPUT type="text" id="ele_sta_cnt<?php echo $ctr;?>" name="ele_sta_cnt<?php echo $ctr;?>" value="<?php echo $ele_sta_cnt;?>" style="text-align:right; color:<?php echo $txtEleClr; ?>" size="3" readonly="readonly">
    </TD>
    <TD align="right">
        <INPUT type="text" id="sec<?php echo $ctr;?>" name="sec<?php echo $ctr;?>" value="<?php echo $row["SEC_GUARD"];?>" style="text-align:right;" size="3" readonly="readonly">
    </TD>
    <TD align="right">
        <INPUT type="text" id="sec_grd_cnt<?php echo $ctr;?>" name="sec_grd_cnt<?php echo $ctr;?>" value="<?php echo $sec_grd_cnt;?>" style="text-align:right; color:<?php echo $txtSecClr; ?>" size="3" readonly="readonly">
    </TD>
    </FORM>
</TR>

PHP 生成一系列 HTML 表单,通过单击相应的 From Submit 按钮选择提交

生成的 HTML 代码

<tr>
    <form id="frmUnitDetails1" name="frmUnitDetails1" action="./getServPersonsStatsUnit.php" method="post" target="_blank"></form>
    <td align="center" width="300px">
        <label id="unit1" for="unit1">GM(ADMIN)</label>
        <input type="hidden" id="unit1" name="unit1" value="GM(ADMIN)">
        <input type="hidden" id="month1" name="month1" value="02-Dec-2021">
        <br>
        <input id="showDetails" name="showDetails" type="submit" value="Show Details" onclick="submitFrm('frmUnitDetails1')">
    </td>
    <td align="right">
        <input type="text" id="ele1" name="ele1" value="2" style="text-align:right;" size="3" readonly="readonly">
    </td>
    <td align="right">
        <input type="text" id="ele_sta_cnt1" name="ele_sta_cnt1" value="3" style="text-align:right; color:red" size="3" readonly="readonly">
    </td>
    <td align="right">
        <input type="text" id="sec1" name="sec1" value="6" style="text-align:right;" size="3" readonly="readonly">
    </td>
    <td align="right">
        <input type="text" id="sec_grd_cnt1" name="sec_grd_cnt1" value="7" style="text-align:right; color:red" size="3" readonly="readonly">
    </td>
    
</tr>

JQuery/JScript 代码

function submitFrm(x)
{
    alert(x);    
    event.preventDefault();

    var formValues= $(x).serialize();
    alert(formValues);
    $.post("./getServPersonsStatsUnit.php", formValues, function(data){
        // Display the returned data in browser
        $("#divShowDetailsOutPut").html(data);
    });
}

【问题讨论】:

  • 你怎么称呼submitFrm? NVM,发现它隐藏在标记中...... submitFrm('frmUnitDetails1') - 如果你这样做 $("frmUnitDetails1") 你会得到什么 - 什么都没有(从技术上讲,它是一个空的 jquery 集合)。所以不是serialize返回null,而是您的选择器不匹配任何元素。使用$("#" + x).serialize()(提示:使用正确的变量名,而不是“x”)(第二个提示:始终使用console.log($(x).length) 调试您的选择器
  • 感谢指出错误和建议。我已将函数调用更改为 submitFrm('#frmUnitDetails1')。此外,我将 FORM 标签放在不允许的 TR 标签内,因此我在 FORM 中一无所获。现在我已经在 TD 中移动了 FROM 标记,并且我正在使用 INPUT 标记的 FORM 属性来指出 FORM。现在我正在使用序列化方法获取数据。

标签: jquery serialization null-string


【解决方案1】:

您的表单是空的,这就是 serialize() 函数给您 null 的原因。确保输入在 form 标签内。

通过仔细查看上面显示的 PHP 生成的 HTML 代码,表单的结束标记紧跟在开始标记关闭之后,因此从技术上讲它没有输入。因此,请确保生成的 HTML 正确完成,以便在表单标签内包含输入。

【讨论】:

  • 是的,你是对的。但我不知道生成的代码如何在表单打开后立即有一个关闭表单标记。如果你看到 php 代码,所有输入元素都在表单开始和结束标记之间。
  • 因为form 不是tr 内的有效标签。为您“修复”它的是浏览器,而不是 php.ini。请参阅 tr 允许的内容 和 td 允许的父母 - &lt;tr&gt; 元素。
  • 感谢freedomn-m。我正在使用 php 动态生成 html 页面,以便在每个表行中都有一个表单。现在,由于 tr 内部不允许使用表单,因此事情将无法正常工作。有没有其他方法可以序列化输入?
  • 你可以预先选择元素而不是使用form - 所以你可以得到tr然后序列化tr的内容,例如$("tr#" + id).find("input,select,textarea").serialize()见serialize()了解更多信息传递什么。
  • 提示,使用@name 向他们发送您的评论通知,没有@ 他们不会收到通知
【解决方案2】:

通过在 TD 中移动 FORM 标记并使用 INPUT 元素的 FORM 属性更改代码后,现在一切正常。这是修改后的代码。

PHP 代码

<TR>
    <TD align="center" width="300px">
        <label id="unitLbl<?php echo $ctr;?>" name="unitLbl<?php echo $ctr;?>" form="frmUnitDetails<?php echo $ctr;?>" for="unitLbl<?php echo $ctr;?>"><?php echo $row["UNIT"];?></label>
        <input type="hidden" id="unit<?php echo $ctr;?>" name="unit<?php echo $ctr;?>" form="frmUnitDetails<?php echo $ctr;?>" value="<?php echo $row["UNIT"];?>">
        <input type="hidden" id="date<?php echo $ctr;?>" name="date<?php echo $ctr;?>" form="frmUnitDetails<?php echo $ctr;?>" value="<?php echo $date;?>">
        <br>
        <FORM id="frmUnitDetails<?php echo $ctr;?>" name="frmUnitDetails<?php echo $ctr;?>" action="./getServPersonsStatsUnit.php" method="post">
        <INPUT id="showDetails<?php echo $ctr;?>" name="showDetails<?php echo $ctr;?>" type="submit" value="Show Details" onclick="submitFrm('#frmUnitDetails<?php echo $ctr;?>')">
        </FORM>
    </TD>
    <TD align="right">
        <INPUT type="text" id="ele<?php echo $ctr;?>" name="ele<?php echo $ctr;?>" form="frmUnitDetails<?php echo $ctr;?>" value="<?php echo $row["ELECT_STAFF"];?>" style="text-align:right;" size="3" readonly="readonly">
    </TD>
    <TD align="right">
        <INPUT type="text" id="ele_sta_cnt<?php echo $ctr;?>" name="ele_sta_cnt<?php echo $ctr;?>" form="frmUnitDetails<?php echo $ctr;?>" value="<?php echo $ele_sta_cnt;?>" style="text-align:right; color:<?php echo $txtEleClr; ?>" size="3" readonly="readonly">
    </TD>
    <TD align="right">
        <INPUT type="text" id="sec<?php echo $ctr;?>" name="sec<?php echo $ctr;?>" form="frmUnitDetails<?php echo $ctr;?>" value="<?php echo $row["SEC_GUARD"];?>" style="text-align:right;" size="3" readonly="readonly">
    </TD>
    <TD align="right">
        <INPUT type="text" id="sec_grd_cnt<?php echo $ctr;?>" name="sec_grd_cnt<?php echo $ctr;?>" form="frmUnitDetails<?php echo $ctr;?>" value="<?php echo $sec_grd_cnt;?>" style="text-align:right; color:<?php echo $txtSecClr; ?>" size="3" readonly="readonly">
    </TD>
</TR>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多