代码:

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;}

转自:https://blog.csdn.net/u010079945/article/details/38680769

转载于:https://www.cnblogs.com/lzw123-/p/9822626.html

onsubmit校验表单时利用ajax的return false无效解决方法相关推荐

  1. layui.form用ajax提交表单时的问题(巨坑)

    主要问题:使用layui的form组件用ajax提交表单发送请求时,总是无法收到回调函数,success与error中的回调均不执行,且该表单会自动刷新. 解决办法:在提交表单的方法form.on() ...

  2. html5表单与Jquery Ajax结合使用

    html5的表单控件提供了很多格式检测功能,可以省去很多烦人的javascript验证代码,例如pattern属性和require属性. 问题: 一般表单的提交用的都是用button然后用ajax来提 ...

  3. 抓浏览器请求时,下载SwitchyOmega提示:程序包无效解决方法

    问题描述: 想要抓取浏览器请求时,需要下载一个SwitchyOmega的插件,进入下载网址:https://proxy-switchyomega.com/,点击本地下载时,提示:程序包无效 解决方法: ...

  4. ajax如何实现表单验证码,Ajax实现提交表单时验证码自动验证(原创自Zjmainstay)...

    本文通过源码展示如何实现表单提交前,验证码先检测正确性,不正确则不提交表单,更新验证码. 1.前端代码 index.html 验证码提交自验证 用户名 验证码 (function($){ $(docu ...

  5. layui表单提交使用form.on(‘submit(sub)‘,function (){}) 使用ajax请求时回调不执行的原因及解决方法

    layui表单提交使用form.on('submit(sub)',function (){}) 使用ajax请求时回调不执行的原因及解决方法 参考文章: (1)layui表单提交使用form.on(' ...

  6. html怎么校验用户名重复,layui的表单验证支持ajax判断用户名是否重复的实例

    如下所示: 在一个表单中,在提交前我们想判断该用户名是否存在,在layui中不支持.onblur()失去焦点事件,用按钮来手动触发,表单又不太美观,可以使用form表单的verify来进行验证. ht ...

  7. Form 表单提交 和 Ajax 表单提交 的一些区别

    自己一些心得体会: 1:form 表单提交后进行后台处理程序,没有直接返回值,只能进行后台处理,Form标签里的所有数据全部提交到后台 ajax 表单提交,是可以局部提交,具有ajax的所有属性... ...

  8. springboot 订单重复提交_Spring Boot (一) 校验表单重复提交

    一.前言 在某些情况下,由于网速慢,用户操作有误(连续点击两下提交按钮),页面卡顿等原因,可能会出现表单数据重复提交造成数据库保存多条重复数据. 存在如上问题可以交给前端解决,判断多长时间内不能再次点 ...

  9. [css] 你有使用:valid和:invalid来校验表单吗?

    [css] 你有使用:valid和:invalid来校验表单吗? 很不好控制,拿必填来举例,:invalid 标红. 初始时就红的,那 :focus:invalid 吧,blur 就不标了: 刚 fo ...

最新文章

  1. 如何使div填充剩余的水平空间?
  2. springboot2.0系列(二):配置属性
  3. golang goland报错错误 $GOPATH/go.mod exists but should not 解决方法
  4. 3.ELK 之elasticsearch CRUD
  5. hdu1058(dp||优先队列)
  6. 【机器学习基础】用Python构建和可视化决策树
  7. 如何用excel筛选相似内容_Excel中如何将两组数据的相同内容进行快速筛选配对...
  8. scipy.ndimage.zoom上采样与下采样
  9. java的druid连接
  10. 你怎么看待 Bug?
  11. Kali Linux 秘籍 第四章 信息收集
  12. harmonyos2.0怎么更新,harmonyOS 2.0什么时候更新 harmonyOS 2.0手机开发者Beta版更新内容[多图]...
  13. Linux开发_快速定位关键字与变量
  14. Atitit. camel分词器 分词引擎 camel拆分 的实现设计
  15. 6天掌握记忆宫殿,你就是记忆大师
  16. 云龙51单片机视频教程+课件+程序代码+课后作业,零基础入门视频教程
  17. [JSMind]使用JSMind操作生成的思维导图
  18. cad卸载不干净_Mac软件卸载不干净?你可以试试AppCleaner
  19. 【原创】《华杉讲透《孙子兵法》》阅读有感(三)
  20. Codeforces 1102F Elongated Matrix 状压dp

热门文章

  1. tcp/ip详解--ttl
  2. 工作场合少聊事事非非
  3. linux下用C语言实现TCP/IP服务器与客户端互相发送数据的socket编程
  4. STM32系统滴答定时器(systick)应用
  5. SM32的USART串口设置
  6. 应用调试(四)系统调用SWI
  7. Linux单网卡多个IP(或者多个网卡多个IP)设置
  8. 使用Postman完成接口测试
  9. 打开IT运维外包的“黑盒”
  10. 根据信号灯状态解决网络故障