jQuery,Ajax和PHP提交多种forms的困境

这是我在网上找到的一个非常简单的表单(因为我是一个jQuery初学者)。

  $(document).ready(function(){ $("form#submit_wall").submit(function() { var message_wall = $('#message_wall').attr('value'); var id = $('#id').attr('value'); $.ajax({ type: "POST", url: "index.php?leht=pildid", data:"message_wall="+ message_wall + "&id="+ id, cache: false, success: function(){ $("ul#wall").prepend(""+message_wall+"", ""+id+""); $("ul#wall li:first").fadeIn(); alert("Thank you for your comment!"); } }); return false; }); });   some PHP ... while($row_pilt = mysql_fetch_assoc($select_pilt)){ print 

下面是我写入mySQL的PHP​​脚本。

这是一个非常简单的脚本。 但是,当我提交它时,它变得越来越复杂。 由于我的页面上有多个表单(每个WHILE PHP LOOP),因此当我提交时 – 只提交FIRST表单。 此外,我提交的任何其他后续表单 – 数据正在从第一个表单中复制。 是否有任何jQuery函数可以清除数据? – 还是有更好的解决方案。

谢谢,尼克

这是因为你给每个表单提供了相同的id,因此它提交了它找到的第一个元素,即第一个表单。 你应该做的是为每个表单分配一个唯一的id,然后为每个表单提供一个AJAX提交函数,提交表单特定的数据。 您可以使用jQuery的$ .each()函数遍历所有表单,并在submit函数中使用$(this).attr(’id’)来检索特定于表单的id。

更新:正如对这个答案的评论所揭示的那样,你实际上并不需要each()函数,因为jQuery无论如何都会将它应用于每个表单元素。

这是一个示例脚本:

 $(document).ready(function(){ $("form").submit(function() { var message_wall = $(this).children('input[type="text"]').attr('value'); var id = $(this).children('input[type="hidden"]').attr('value'); $.ajax({ type: "POST", url: "index.php?leht=pildid", data:"message_wall="+ message_wall + "&id="+ id, cache: false, success: function(){ $("ul#wall").prepend(""+message_wall+"", ""+id+""); $("ul#wall li:first").fadeIn(); alert("Thank you for your comment!"); } }); return false; }); }); 

因为我们无法看到你的所有 form ,我不完全确定,但是考虑到你的问题,我将假设其他forms都共享相同的idform#submit_wall ),这是无效的id 必须在文档中是唯一的。

鉴于您要更改其他表单的id (我建议使用class名,可能是’submit_wall’,但具体由您决定),jQuery也需要更改。 从:

 $("form#submit_wall").submit(function() { 

至:

 $("form.submit_wall").submit(function() { // using the class-name instead of the id. 

当然,现在你遇到了重复id的相同问题。

所以我再次建议将id更改为class并更改:

 var message_wall = $('#message_wall').attr('value'); var id = $('#id').attr('value'); 

至:

 var message_wall = $(this).find('.#message_wall').attr('value'); var id = $(this).find('.id').attr('value'); 

鉴于您上面发布的混乱,我发现很难相信这就是您所需要的。 绝对值得发布完整再现代码的整页(或JS Fiddle或JS Bin的演示)。