【问题标题】:Add more (sets of) fields to form by jQuery通过 jQuery 添加更多(组)字段以形成
【发布时间】:2012-03-01 13:15:45
【问题描述】:

通过 jQuery 向 html 表单添加更多字段很容易。然后,我们可以序列化这些字段,如果它们具有相同的name,但是如果我们有一组字段呢?例如

<input type="text" name="movie1_name" />
<input type="text" name="movie1_director" />
<input type="text" name="movie1_year" />

现在我想通过 jQuery 添加一组新字段

<input type="text" name="movie2_name" />
<input type="text" name="movie2_director" />
<input type="text" name="movie2_year" />

等等。我用 PHP 处理表单以将电影插入 mysql 数据库,其中包含三列(名称、导演、年份)。在上述示例中,很难序列化字段以创建适当的 $_POST 数组。我应该如何序列化 jquery 添加的电影集?

【问题讨论】:

  • 我不明白你的问题。
  • 我添加了更多描述以澄清。

标签: php javascript jquery html forms


【解决方案1】:
<input type="text" name="movie_name[]" />
<input type="text" name="movie_director[]" />
<input type="text" name="movie_year[]" />

<input type="text" name="movie_name[]" />
<input type="text" name="movie_director[]" />
<input type="text" name="movie_year[]" />

没有别的了。在服务器上,您将在 $_POST['movie_name']、$_POST['movie_director'] 和 $_POST['movie_year']; 中获得(如果是 POST)数组。具有相同索引的元素来自同一组输入。

你在序列化方面有什么问题?

<form>   
<input type="text" name="movie_name[]" />
<input type="text" name="movie_director[]" />
<input type="text" name="movie_year[]" />
<hr />
<input type="text" name="movie_name[]" />
<input type="text" name="movie_director[]" />
<input type="text" name="movie_year[]" />
 <br />
<input type='button' id='serialize' value='Click me' />
</form>

和js代码:

$('#serialize').click(function(){
    alert($('form').serialize()); 
});

当你要提交数据的时候就写

 $.post('script.php', $('form').serialize(), function() {alert('Saved');}); 

ps:如果你害怕失去一些东西,只需比较 count($_POST['movie_name'])、count($_POST['movie_director']) 和 count($_POST['movie_year'])。

或者你可以添加索引

   <input type="text" name="movie_name[0]" />
   <input type="text" name="movie_director[0]" />
   <input type="text" name="movie_year[0]" />

   <input type="text" name="movie_name[1]" />
   <input type="text" name="movie_director[1]" />
   <input type="text" name="movie_year[1]" />

【讨论】:

  • 一开始我是这么想的;但想象一下,由于故障,一个字段(例如movie_director2)没有提交。然后字段将错位在行中。我知道这是不可能的;但它可能会导致数据库中出现错误数据的混乱(可怕)。
  • @Ali 怎么不能提交?计算每个数组并检查您是否具有相同数量的元素。如果您害怕某些事情,请添加索引。
【解决方案2】:

根据与Cheery 的有益讨论,我得出结论,最好和最安全的方法是使用

<input type="text" name="movie_name[i]" />
<input type="text" name="movie_director[i]" />
<input type="text" name="movie_year[i]" />

我们使用 jQuery 定义每个 i 以安全地序列化字段。这样,我们可以确保序列化的数组是并行的并且匹配良好,不会错位。

【讨论】:

  • 我不明白你提到的这些字段怎么会被放错地方?如果您相应地添加新字段,则应该将第二个名称添加为第二个董事和年份(依此类推)。
【解决方案3】:

你可以这样做:

<input type="text" name="movie1_name" />
<input type="text" name="movie1_director" />
<input type="text" name="movie1_year" />
// OTHER:
<input type="text" name="movie2_name" />
<input type="text" name="movie2_director" />
<input type="text" name="movie2_year" />

对所有人都这样做...在 Jquery 中,您创建一个根据需要创建字段的函数...我不是 JQuery 中最好的,所以我无法帮助您,但我告诉您的工作方式PHP 对我来说很好......

【讨论】:

  • 那么如何用 PHP 来阅读呢? $_POST['movie2_name'],但是我们有多少部电影?想象一下,直到 $_POST['movie15_name'],我们应该一一检查。
  • 我认为有一种方法可以在 PHP 中计算 $_POST['movieXX_name'] 的数量并创建一个 foreach()... 浏览器 Google 或提问...我没有使用这个,因为 @ 987654324@函数,我讨厌它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-10
  • 2015-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多