原来的代码

function checkNewEmail(){

var re_email=new RegExp("\\w+@\\w+\\.\\w+\\.?\\w*");
             var newEmail=$("#email_new").val();
             if(re_email.test(newEmail)){
                 $.ajax({
                     type:"post",
                     dataType:"json",
                     url:"existEmail?email="+newEmail,
                     success:function(dataResult){
                         if(dataResult=="true"){
                             $("#emial-error").text("邮箱已注册。");
                             return false;
                         }else{
                             return true;
                         }
                     }
                 });
             }else{
                 return false;
             }

}

每次邮箱格式正确用ajax判断邮箱是否已存在时,无论成功否都执行submit,卡了好久,网上找了好多,终于找到原因也解决方案了。

问题原因

执行ajax时return false的function 与onsubmit()不是同一个函数,所以无论return 什么都会直接执行submit()提交表单

ok知道错误原因了之后修改一下代码

修改后代码

function checkNewEmail(){

var flat=false;

var re_email=new RegExp("\\w+@\\w+\\.\\w+\\.?\\w*");
             var newEmail=$("#email_new").val();
             if(re_email.test(newEmail)){
                 $.ajax({
                     type:"post",
                     dataType:"json",
                     url:"existEmail?email="+newEmail,
                     success:function(dataResult){
                         if(dataResult=="true"){
                             $("#emial-error").text("邮箱已注册。");
                             flat=false;
                         }else{
                             flat=true;
                         }
                     }
                 });
             }else{
                 return false;
             }

return flat;

}

修改之后再执行,可是每次执行完都return false,就好像flat=true,不起作用一样,可是调试了发现明明有执行flat=true

问题原因

在执行ajax时,async默认的默认值为true,这种情况为异步方式,就是说ajax发送请求后,在等待服务端返回的这个过程中,前台会继续执行ajax块后面的脚本,直到服务端返回正确的结果才会执行success,也就是说这时执行的是两个线程,一个线程在执行ajax时另一个进程已经执行return flat了。所以一直返回false.把async改为false,这时才是同步方式,只有一个线程。

找到原因后,再修改一下代码,最终终于成功了。

最终代码

function checkNewEmail(){
             var flat=false;
             var re_email=new RegExp("\\w+@\\w+\\.\\w+\\.?\\w*");
             var newEmail=$("#email_new").val();
             if(re_email.test(newEmail)){
                 $.ajax({
                     type:"post",
                     dataType:"json",
                     async:false,//同步方式
                     url:"existEmail?email="+newEmail,
                     success:function(dataResult){
                         if(dataResult=="true"){
                             $("#emial-error").text("邮箱已注册。");
                             flat=false;
                         }else{
                             flat=true;
                         }
                     }
                 });
             }else{
                 $("#emial-error").text("邮箱格式不正确。");
                 return false;
             }
             return flat;
         }

---------------------

本文来自 Boh_ 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/u010079945/article/details/38680769?utm_source=copy

onsubmit校验表单时利用ajax的return false无效解决方法-转的更多相关文章

  1. onsubmit校验表单时利用ajax的return false无效解决方法

    代码: function checkNewEmail(){ var re_email=new RegExp("\\w+@\\w+\\.\\w+\\.?\\w*"); var new ...

  2. iframe中使用模态框提交表单后,iframe加载父页面的解决方法

    在iframe中使用模态框提交表单后,会出现iframe加载整个父页面的问题,如下图: 解决方法: 在form表单中添加target属性 _parent 这个属性会使目标文档载入父窗口或者包含来超链接 ...

  3. Ajax中return false无效 怎么解决?

    var flag=0; $.ajax({ url:"widget?type=member_register&ajax=yes&action=checkname&use ...

  4. 关于使用 AJax 生成Form表单,且表单提交需要验证,验证实效的解决方法

    @Ajax.ActionLink("添加", "AddUser",new AjaxOptions() {InsertionMode = InsertionMod ...

  5. jQuery ajax使用$(this).parent()无效解决方法

    div=$(this).parent(); //先获取父级元素 div.remove(); //再删除 $(".delStu").click(function () {       ...

  6. javascript将异步校验表单改写为同步表单

    同步表单校验的缺点 响应错误信息时,需要重新加载整个页面(虽然有缓存,客户端仍然需要通过http协议对比每个文件是否有更新,以保持文件最新) 服务器响应错误以后,用户之前所输入的信息全部丢失了,用户需 ...

  7. Ajax实现提交表单时验证码自动验证(原创自Zjmainstay)

    本文通过源码展示如何实现表单提交前,验证码先检测正确性,不正确则不提交表单,更新验证码. 1.前端代码 index.html <!DOCTYPE html> <html> &l ...

  8. KindEditor:Ajax提交表单时获取不到HTML内容

    当用Ajax提交表单时,KindEditor的内容获取不到,HTML数据获取不了 原因:当ajax提交时,KindEdito的HTML数据还没有同步到表单中来,那怎么去获取HTML数据呢? ----- ...

  9. JavaWeb网上图书商城完整项目--day02-4.regist页面提交表单时对所有输入框进行校验

    1.现在我们要将table表中的输入的参数全部提交到后台进行校验,我们提交我们是按照表单的形式提交,所以我们首先需要在table表外面添加一个表单 <%@ page language=" ...

随机推荐

  1. org.hibernate.LazyInitializationException异常解决办法

    org.hibernate.LazyInitializationException异常failed to lazily initialize a collection...的解决方案使用hiberna ...

  2. Net链接Sql Server语法

    1.登录名.密码链接 </system.web> <appSettings> <!--<add key="MSSqlConnectionString&qu ...

  3. JS动画三剑客——setTimeout、setInterval、requestAnimationFrame

    一.前言 前端实现动画效果主要有以下几种方法:CSS3中的transition 和 animation ,Javascript 中可以通过定时器 setTimeout.setinterval,HTML ...

  4. Mybatis 动态insert语句

    mybatis的一个比较先进的思想是把Sql语句写在了配置xml文件(也支持注解),通过配置文件的方式,免去了一般软件开发的硬编码,当业务需求改变的时候,只需要更改sql语句即可! 下面是个人在学习m ...

  5. 每日一题 - 剑指 Offer 42. 连续子数组的最大和

    题目信息 时间: 2019-06-30 题目链接:Leetcode tag: 动态规划 难易程度:简单 题目描述: 输入一个整型数组,数组里有正数也有负数.数组中的一个或连续多个整数组成一个子数组.求 ...

  6. 每日一题 - 剑指 Offer 54. 二叉搜索树的第k大节点

    题目信息 时间: 2019-07-04 题目链接:Leetcode tag:二叉搜索树 中序遍历 递归 难易程度:中等 题目描述: 给定一棵二叉搜索树,请找出其中第k大的节点. 示例1: 输入: ro ...

  7. CodeForces 1293 C NEKO's Maze Game

    [题目链接] [题目大意] 有一个2 ∗ n的地图,小女孩从(1,1)想移动到(2,n) 有q次询问,每次询问更改一个格子状态(是否可以通过) 只能上下左右移动而不能斜着移动,问每次操作后,是否可以移 ...

  8. Python-模块XlsxWriter将数据写入excel

    1.目的 用xlwt来生成excel的,生成的后缀名为xls,在xlwt中生成的xls文件最多能支持65536行数据.python XlsxWriter模块创建aexcel表格,生成的文件后缀名为.x ...

  9. 什么是electron

    Electron 是什么 定义 Electron是一个能让你使用传统前端技术(Nodejs, Javascript, HTML, CSS)开发一个跨平台桌面应用的框架.这里所说的桌面应用指的是在Win ...

  10. mysql全外和交叉&&sql92pksql99

    #全外 use girls; SELECT b.*,a.* FROM beauty b FULL OUTER JOIN boys a on b.boyfrien_id=a.id; #交叉连接99标准笛 ...