2012-04-13 25 views
1

我一直在使用captcha在我的网站上开发联系表单。一个例子可以看这里:jQuery ajax调用重置所有表单字段

contact form

几年前,如果用户需要重新加载验证码图像,我唯一的选择然后重新加载整个表格。

由于我开始使用jQuery,现在是时候用一个只刷新图像的方法来替换这个方法。

所以我写了这个小片段:

$(document).ready(function() { 
    $('#creload').click(function() { 
     $.ajax({ 
      type: "POST", 
      url: "/en/KDpg_Captcha.html", 
      async: true, 
      success: function(ret) { 
       $('#cimg').attr('src', ret); 
      } 
     }); 
    }); 
});​ 

其中#creload是要求重装和#cimg链接的id是实际图像的ID。

我发现的是,如果填写其他表单字段,然后请求重新加载,其他字段将被重置。这不是一个需要的结果。

什么可能我会丢失?

回答

2

如果#creload是一个链接,您需要阻止它执行默认操作,该操作将打开href属性中的内容。添加e.preventDefault()可以停止此操作。不要忘记添加è作为参数:

$('#creload').click(function(e) { 
    e.preventDefault(); 
    // ... 
+1

注到OP:不要忘记更改'函数()''到功能(E),以事件对象分配给''e'。 – Blazemonger 2012-04-13 18:40:27

2

当你点击以下链接:

<a href id="creload">here</a> 

当前页面会被解释为href并重新加载页面。

您可以通过添加function(e)e.preventDefault()click处理防止这种编程方式为TJ描述,或者更简单地通过改变链接:

<a href="#" id="creload">here</a> 

,或者,如果你不希望#链接带游客到页面的顶部:

<a href="javascript:" id="creload">here</a> 
+1

请注意,'#'也会导致链接将您带到页面的顶部。 – 2012-04-13 18:40:45

+0

@JamesMontagne因为在这种情况下,链接也在页面的顶部,这并不重要。但无论如何,我会更新我的答案,为未来的读者带来益处。 – Blazemonger 2012-04-13 18:41:39

+0

好吧,我现在很沮丧。首先,我意识到我的ajax调用不正确,因为我想要做的是更改实际图像,而不是图像的src。所以我删除了所有的ajax,并简单地用 – 2012-04-16 16:45:40