2014-02-26 50 views
2

我有一个MVC应用程序使用自己的用户数据库和身份验证系统,而不是标准的帐户控制器和aspnet认证系统(没有计划改变这一点)。作为其中的一部分,我有一个jQuery事件,在表单发布到服务器之前检查是否存在用户名,以创建新用户。当我在.submit函数的开头放置一个event.preventDefault时,一切似乎都正常。但是,如果用户名已存在,我只想阻止帖子。在下面的例子中,我从来没有收到警报和发布后任何人都可以告诉我我做错了什么?谢谢!为什么我的jQuery事件不能阻止帖子?

$(document).ready(function() { 
     $('#ProcessApplication').submit(function (event) 
     {            
      var un = encodeURIComponent($("input[name='form_email1']").val()); 
      var myurl = '/Home/IsUser/' + un; 
      alert(myurl); 
      $.ajax({ 
       url: myurl, 
       success: function (response) { 
        if (response == '1') {       
         alert("This e-mail address is already registered. Please login, then resubmit your application."); 
         event.preventDefault(); // <-- I've tried both event.preventDefault(); and return false; here 
        } 
       } 
      });     
     }); 
    }); 

回答

1

您需要将async: false添加到您的ajax设置中。

+0

谢谢,这正是我所需要的。一旦我添加了这个,我将我的其他逻辑移出成功处理程序,现在一切正常! – Ryan

5

你只需要preventDefault()早些时候在你的函数...

$(document).ready(function() { 
    $('#ProcessApplication').submit(function (event) {            
     event.preventDefault(); // <-- Put it here 
     var un = encodeURIComponent($("input[name='form_email1']").val()); 
     var myurl = '/Home/IsUser/' + un; 
     alert(myurl); 
     $.ajax({ 
      url: myurl, 
      success: function (response) { 
       if (response == '1') {       
        alert("This e-mail address is already registered. Please login, then resubmit your application."); 
       } 
      } 
     });     
    }); 
}); 

如果你有它,它只是被称为Ajax调用完成后,将后提交发生的方式。

+0

event.preventDefault();可以位于.submit()函数的任何位置(顶部或底部),但不能嵌套在Ajax响应函数中。否则,它不会尝试阻止默认操作,直到它发生。 – Andrew

+0

@badmin当然你是对的。这只是我的编码风格,它立即将其放入一个函数中,它将被称为它。我有很多这样的怪癖,比如在创建对象后立即为对象输入一个摧毁调用,然后将代码放在中间。我对这样的事情颇为肛门,但它对我很好:p – Archer

相关问题