2012-04-16 62 views
1

我有一个PHP页面上有多个表单,我希望jQuery能够在点击提交后(不刷新页面)隐藏每个表单。每次创建php页面时,表单的id都是动态生成和唯一的。jQuery preventDefault停止序列化和随后的Ajax调用

如果我不使用preventDefault,那么下面的脚本提交数据,但刷新页面(我不想)。如果我使用preventDefault,表单仍然提交,但没有数据(serialize似乎不起作用)。

<script> 
$(document).ready(function() { 
    $(".connection").click(function(e) { 
     e.preventDefault(); 
     var data = $(this).serialize(); 
     var element = $(this); 
     var connectid = element.attr("id"); 
     $.ajax({ 
      url: "/beta/membersarea.php", 
      type: "POST", 
      cache: false, 
      data: data, 
      success: function(data) { 
       $("#connected_" + connectid).hide(); 
      } 
     }); 
    }); 
});​ 
</script> 

回答

2

$(this)在你的代码提交按钮,而不是形式... this在jQuery的处理程序是的DOM元素,处理程序连接到。从这个

变化:

$(".connection").click 

要这样:

$("form").submit(function(e) { 

全码:

$(document).ready(function() { 
    $("form").submit(function(e) { 
     e.preventDefault(); 
     var $element = $(this); 
     var data = $element.serialize(); 
     $.ajax({ 
      url: "/beta/membersarea.php", 
      type: "POST", 
      cache: false, 
      data: data, 
      success: function(data) { 
       $element.hide(); 
      } 
     }); 
    }); 
});​ 
+1

你还必须改变你的成功函数只是'element.hide();'你可能会摆脱'var connectid = element.attr(“id”);' – idrumgood 2012-04-16 21:36:11

+0

是的,你是对。我改进了它。谢谢。 – gdoron 2012-04-16 21:39:53

0

的preventDefault是防止默认动作是正常的形式提交在这种情况下。我想你的问题是你没有序列化正确的元素(形式)。试试

$(this)表示当前项目。当您在提交按钮中单击访问$(this)时,它将引用表单中的提交按钮元素。不是持有提交按钮的表单。

$(document).ready(function() { 
    $(".connection").click(function(e) { 
     e.preventDefault(); 
     var data = $("form").serialize(); 
     var element = $(this); 
     var connectid = element.attr("id"); 
     $.ajax({ 
      url: "/beta/membersarea.php", 
      type: "POST", 
      cache: false, 
      data: data, 
       success: function(data) 
       { 
       $("#connected_"+connectid).hide(); 
       } 
       }); 
     });  
}); 

假设connection是您的提交按钮的类名称。

+0

“我有上有** **多形式的PHP页面” - 怎么是'.serialize()'会包含多个表单一个jQuery对象上调用的时候采取行动? – 2012-04-16 21:35:11

+0

@AnthonyGrist:在这种情况下,我可能会序列化具有该步骤的特定div。或者如果它是我必须发送的1/2值,我将手动读取并作为json发送。 – Shyju 2012-04-16 21:37:06

+0

@Shyju。你的修复工作。真棒。谢谢! – user749798 2012-04-16 21:58:04