0

我将使用一个玩具示例来说明我的问题:

我有一个表格,可以获取有关用户的一些详细信息:

<form action="#" method="post" id="myform">
    <input type="text" name="fname" />
    <input type="text" name="sname" />
    <input type="text" name="birthdate" />
    <select name="hobbies">
        <option>Programming</option>
        <option>Eating cats</option>
        <option>Explaining string theory to my grandmother</option>
    </select>
</form>

我将通过 ajax 调用将它发送到我的服务器,这样我就可以在不刷新页面的情况下给出某种响应:

$.post("myserverscript.php", $('#myform').serialize(), function(){...callback...});

这工作正常。

现在,我需要在同一页面上获取有关多个用户的相同信息。没问题,我只是添加[]到我的输入名称:

<form action="#" method="post" id="myform">
    <input type="text" name="fname[]" />
    <input type="text" name="sname[]" />
    <input type="text" name="birthdate[]" />
    <select name="hobbies[]">
        <option>Programming</option>
        <option>Eating cats</option>
        <option>Explaining string theory to my grandmother</option>
    </select>
</form>

再一次,世界一切都很好。

现在,我想让用户每个人选择一个以上的爱好:

<form action="#" method="post" id="myform">
    <input type="text" name="fname[]" />
    <input type="text" name="sname[]" />
    <input type="text" name="birthdate[]" />
    <select name="hobbies[]" multiple>
        <option>Programming</option>
        <option>Eating cats</option>
        <option>Explaining string theory to my grandmother</option>
    </select>
</form>

这就是事情开始有点梨形的地方。当我serialize()现在打电话时,所有的爱好都放在一个数组中——所以我无法说出哪个用户有哪些爱好。

我尝试过使用[][]而不是,[]但这只是将每个单独的项目放入爱好数组中它自己的数组中,所以我仍然丢失了用户->爱好链接。

我能看到的唯一方法是编写自己的serialize()方法,根据需要对事物进行分组。

有没有更好、更简单或更优雅的方法来做到这一点?

4

2 回答 2

1

我有一个类似的问题,但我这样做的方式是为每个用户分配一个特定的数组

例如这个小提琴

<form action="#" method="post" id="myform">
    <input type="text" name="user1[fname]" />
    <input type="text" name="user1[sname]" />
    <input type="text" name="user1[birthdate]" />
    <select name="user1[hobbies]" multiple>
        <option>Programming</option>
        <option>Eating cats</option>
        <option>Explaining string theory to my grandmother</option>
    </select>
    <a href="#" id="submit">Submit</a>
</form>
于 2012-10-02T14:37:54.017 回答
1

我的标准方法是将 附加UserID到输入名称,并在它们之间加上下划线。

所以,而不是这个:

<input type="text" name="fname[]" />

这将是:

<input type="text" name="fname_23423" />

然后,在服务器端,您将输入名称拆分为_. 第一个元素是输入名称,第二个元素是 ,UserID一切就绪。

于 2012-10-02T14:21:48.343 回答