如何限制用户两次提交表单?

时间:2013-05-03 16:58:32

标签: c# javascript jquery asp.net

我有一个asp.net表单,允许用户提交一个注册表单,该表单使用Web服务在SharePoint列表内部发送/存储所有这些值,因此提交页面处理时间比正常情况稍长一些形式。

在页面重定向到感谢页面之前的平均时间,用户倾向于再次单击提交按钮,这会导致多次提交相同的记录。

请建议一种限制此提交的方法,点击按钮我使用jquery函数进行数据验证,我尝试在那里使用btn.disable = true方法,但是一旦它到达了else块(在通过验证后)这是disable = true代码的地方)它在读取btn.disable = true语句后不提交表单。

专家,请给我指路。

提前致谢。

3 个答案:

答案 0 :(得分:4)

参见Nathan Long的插件:https://stackoverflow.com/a/4473801/1414562

{已修改为允许在输入更改时重新提交表单}

// jQuery plugin to prevent double submission of forms
jQuery.fn.preventDoubleSubmission = function() {
  var $form = $(this);
  $form.on('submit',function(e){ //on here instead of bind    
    if ($form.data('submitted') === true) {
      // Previously submitted - don't submit again
      e.preventDefault();
    } else {
      // Mark it so that the next submit can be ignored
      $form.data('submitted', true);
    }
  }).find('input').on('change',function(){
       $form.data('submitted',false);
  });

  // Keep chainability
  return this;
};

像这样使用:

$('form').preventDoubleSubmission();

答案 1 :(得分:0)

正如您所发现的,如果您在onclick处理程序中禁用该按钮,它将不会将请求发送到服务器。解决这个问题的简单“黑客”是,而不是立即禁用按钮,使用setTimeout来安排一个函数运行,比如5ms将禁用按钮;这将允许在禁用按钮之前将请求发送到服务器,同时没有留出足够的时间让某人实际点击它两次。

答案 2 :(得分:0)

两种方式

在Jquery中或通过C#

Jquery的

 $("#btnSubmit").live("click",(function(e) {
    this.disabled = true;
    /Do Something /
  this.disabled = false;
return false;}));

C#

protected void btnSubmitClick(object sender, EventArgs e)
{
btnSubmit.Enabled = false;
/Do Something/
btnSubmit.Enabled = true;
}

希望这有帮助

非常感谢 安娜