最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - jQuery .serialize() returns empty - Stack Overflow

programmeradmin0浏览0评论

I have this form inside a table:

<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());
    });
});

When I submit the form the alert es out blank. :| I really have NO idea why this happens. Each text box has a name. I've serialized forms similar to this (inside a table) before.

Edit: This is the 'original' HTML (before the jQuery and browser edits it):

<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>

And this is the jQuery that replaces the text with textboxes:

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

I have this form inside a table:

<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());
    });
});

When I submit the form the alert es out blank. :| I really have NO idea why this happens. Each text box has a name. I've serialized forms similar to this (inside a table) before.

Edit: This is the 'original' HTML (before the jQuery and browser edits it):

<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>

And this is the jQuery that replaces the text with textboxes:

$("td.editable").each(function(index) {
                $(this).html("<input type='text' class='textbox' value='"+$(this).html()+"' name='input"+index+"'/>");
})
Share Improve this question edited Mar 17, 2012 at 3:21 Jacob Brunson asked Mar 17, 2012 at 3:01 Jacob BrunsonJacob Brunson 1,4924 gold badges24 silver badges37 bronze badges
Add a ment  | 

2 Answers 2

Reset to default 3

The problem is definitely the markup:

<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>

Wrap your table in the <form> tags instead of putting them in the table.

<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 (subbing in plain-text values for what your PHP code would sub in).

Your <form> element ends prematurely (see the ending tag right next to the closing tag?).

Try this HTML instead:

<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>​
发布评论

评论列表(0)

  1. 暂无评论