【问题标题】:jQuery .serialize() returns emptyjQuery .serialize() 返回空
【发布时间】:2012-03-17 03:01:55
【问题描述】:

我在表格中有这个表格:

<table id="fields">
    <form method="post" id="accountform"></form>
    <tbody><tr><td class="key">First Name:</td><td class="value">bla bla</td></tr>
    <tr><td class="key">Last Name:</td><td class="value">bla bla</td></tr>
    <tr><td class="key">Email:</td><td class="editable"><input type="text" class="textbox" value="blabla" name="input0"></td></tr>
    <tr><td class="key">Cell Number:</td><td class="editable"><input type="text" class="textbox" value="123-456-7890" name="input1"></td></tr>
    <tr><td class="key">Extension:</td><td class="editable"><input type="text" class="textbox" value="1234" name="input2"></td></tr>
    <tr><td class="key">Authority Level:</td><td class="value">Admin</td></tr>
    <tr><td align="right" colspan="2"><input type="submit" value="Save" id="submit"></td></tr>
</tbody></table>

Javascript/jQuery:

$(document).ready(function(){
    $("form#accountform").submit(function() {
        alert($(this).serialize());
    });
});

当我提交表单时,警报显示为空白。 :| 我真的不知道为什么会这样。每个文本框都有一个名称。我之前已经序列化了与此类似的表单(在表格内)。

编辑: 这是“原始”HTML(在 jQuery 和浏览器编辑之前):

<table id="fields">
    <form method="post" id="accountform" action="">
    <tr><td class="key">First Name:</td><td class="value"><?php echo $_SESSION['firstname']; ?></td></tr>
    <tr><td class="key">Last Name:</td><td class="value"><?php echo $_SESSION['lastname']; ?></td></tr>
    <tr><td class="key">Email:</td><td class="editable"><?php echo $_SESSION['email']; ?></td></tr>
    <tr><td class="key">Cell Number:</td><td class="editable"><?php echo formatPhone($_SESSION['phone']); ?></td></tr>
    <tr><td class="key">Extension:</td><td class="editable"><?php echo $_SESSION['ext']; ?></td></tr>
    <tr><td class="key">Authority Level:</td><td class="value"><?php echo authToName($_SESSION['auth']); ?></td></tr>
    <tr><td align="right" colspan="2"><input type="submit" value="Edit" id="submit"/></td></tr>
    </form>
</table>

这是用文本框替换文本的jQuery:

$("td.editable").each(function(index) {
                $(this).html("<input type='text' class='textbox' value='"+$(this).html()+"' name='input"+index+"'/>");
})

【问题讨论】:

    标签: javascript jquery html forms post


    【解决方案1】:

    问题肯定是标记:

    <table id="fields">
        <form method="post" id="accountform" action=""> <!-- Form does not go in the table -->
        <tr>...</tr>
            ...
        <tr>...</tr>
        </form> <!-- Form does not go in the table -->
    </table>
    

    &lt;form&gt; 标签包裹你的表格,而不是将它们放在表格中。

    <form method="post" id="accountform" action="">
        <table id="fields">
            <tr><td class="key">First Name:</td><td class="value"><?php echo $_SESSION['firstname']; ?></td></tr>
            <tr><td class="key">Last Name:</td><td class="value"><?php echo $_SESSION['lastname']; ?></td></tr>
            <tr><td class="key">Email:</td><td class="editable"><?php echo $_SESSION['email']; ?></td></tr>
            <tr><td class="key">Cell Number:</td><td class="editable"><?php echo formatPhone($_SESSION['phone']); ?></td></tr>
            <tr><td class="key">Extension:</td><td class="editable"><?php echo $_SESSION['ext']; ?></td></tr>
            <tr><td class="key">Authority Level:</td><td class="value"><?php echo authToName($_SESSION['auth']); ?></td></tr>
            <tr><td align="right" colspan="2"><input type="submit" value="Edit" id="submit"/></td></tr>
        </table>
    </form>
    

    Working fiddle(以纯文本值替换您的 PHP 代码将包含的内容)。

    【讨论】:

    • 哇,它有效。这很奇怪,因为我以相同的方式设置了其他表单并对其进行序列化。嗯。我会回去修复它们。我选择哪个答案是正确的?你解决了问题的后半部分,Blender 解决了前半部分。
    • 这是一个只有你能回答的问题。 :)
    【解决方案2】:

    您的&lt;form&gt; 元素过早结束(看到结束标签旁边的结束标签了吗?)。

    试试这个 HTML:

    <form method="post" id="accountform">
      <table id="fields">
        <tbody>
          <tr><td class="key">First Name:</td><td class="value">bla bla</td></tr>
          <tr><td class="key">Last Name:</td><td class="value">bla bla</td></tr>
          <tr><td class="key">Email:</td><td class="editable"><input type="text" class="textbox" value="blabla" name="input0"></td></tr>
          <tr><td class="key">Cell Number:</td><td class="editable"><input type="text" class="textbox" value="123-456-7890" name="input1"></td></tr>
          <tr><td class="key">Extension:</td><td class="editable"><input type="text" class="textbox" value="1234" name="input2"></td></tr>
          <tr><td class="key">Authority Level:</td><td class="value">Admin</td></tr>
          <tr><td align="right" colspan="2"><input type="submit" value="Save" id="submit"></td></tr>
        </tbody>
      </table>
    </form>​
    

    【讨论】:

    • 嗯,这很奇怪!似乎我的浏览器过早地自动关闭了标签,因为当页面首次加载时,表单内没有输入字段。在运行时,我有将字段插入表中的 jquery,但似乎表单已经关闭,因此字段什么都不做。我需要做进一步的调查。
    • 我认为这可能是因为标记无效。我将发布“原始”HTML(在 jquery 之前)和更改它的代码。
    • 我已在原帖中添加了详细信息。
    猜你喜欢
    • 2012-04-20
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 2014-01-08
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多