onsubmit校验表单时利用ajax的return false无效解决方法-转
原来的代码
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无效解决方法-转的更多相关文章
- onsubmit校验表单时利用ajax的return false无效解决方法
代码: function checkNewEmail(){ var re_email=new RegExp("\\w+@\\w+\\.\\w+\\.?\\w*"); var new ...
- iframe中使用模态框提交表单后,iframe加载父页面的解决方法
在iframe中使用模态框提交表单后,会出现iframe加载整个父页面的问题,如下图: 解决方法: 在form表单中添加target属性 _parent 这个属性会使目标文档载入父窗口或者包含来超链接 ...
- Ajax中return false无效 怎么解决?
var flag=0; $.ajax({ url:"widget?type=member_register&ajax=yes&action=checkname&use ...
- 关于使用 AJax 生成Form表单,且表单提交需要验证,验证实效的解决方法
@Ajax.ActionLink("添加", "AddUser",new AjaxOptions() {InsertionMode = InsertionMod ...
- jQuery ajax使用$(this).parent()无效解决方法
div=$(this).parent(); //先获取父级元素 div.remove(); //再删除 $(".delStu").click(function () { ...
- javascript将异步校验表单改写为同步表单
同步表单校验的缺点 响应错误信息时,需要重新加载整个页面(虽然有缓存,客户端仍然需要通过http协议对比每个文件是否有更新,以保持文件最新) 服务器响应错误以后,用户之前所输入的信息全部丢失了,用户需 ...
- Ajax实现提交表单时验证码自动验证(原创自Zjmainstay)
本文通过源码展示如何实现表单提交前,验证码先检测正确性,不正确则不提交表单,更新验证码. 1.前端代码 index.html <!DOCTYPE html> <html> &l ...
- KindEditor:Ajax提交表单时获取不到HTML内容
当用Ajax提交表单时,KindEditor的内容获取不到,HTML数据获取不了 原因:当ajax提交时,KindEdito的HTML数据还没有同步到表单中来,那怎么去获取HTML数据呢? ----- ...
- JavaWeb网上图书商城完整项目--day02-4.regist页面提交表单时对所有输入框进行校验
1.现在我们要将table表中的输入的参数全部提交到后台进行校验,我们提交我们是按照表单的形式提交,所以我们首先需要在table表外面添加一个表单 <%@ page language=" ...
随机推荐
- Python之浅谈基础
执行python的两种方式 交互式(jupyter) 通过cmd或jupyter运行python代码 优点:运行一句执行一句 缺点:关闭cmd或jupyter后数据消失 命令行式(pycharm) 优 ...
- 【FastDFS】FastDFS 分布式文件系统的安装与使用,看这一篇就够了!!
写在前面 有不少小伙伴在实际工作中,对于如何存储文件(图片.视频.音频等)没有一个很好的解决思路.都明白不能将文件存储在单台服务器的磁盘上,也知道需要将文件进行副本备份.如果自己手动写文件的副本机制, ...
- Java 内存回收机制
当执行构造方法生成一个对象时,需要占用各种系统资源.当生成的对象不再使用时,就需要返回给操作系统,以免资源的泄露.在各种系统资源中,最常使用的就是内存.Java运行时系统通过垃圾收集周期性地释放无用对 ...
- Cannot use 'in' operator to search for '23' in
在用$.each(data,function(){i,n})时,有时会报错 Cannot use 'in' operator to search for '23' in,
- 洛谷P3237 [HNOI2014]米特运输
题目描述 米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为主要能源的D星上,这种米特能源的运输和储 存一直是一个大问题.D星上有N个城市,我们将其顺序编号为1到N,1号城市为首都.这N个 ...
- java学习第四天7/9
一. 今天学习了一些算法: 求最小值,最大值,平均值 接着学了几种排序方法 1.冒泡排序 (1)逐一比较数组中响铃的两个元素,如果后面的数字小于前面的数字,就交换先后元素: (2)经过一个轮次的比较, ...
- Maven 专题(八):配置(一)常用修改配置
修改配置文件 通常我们需要修改解压目录下conf/settings.xml文件,这样可以更好的适合我们的使用. 此处注意:所有的修改一定要在注释标签外面,不然修改无效.Maven很多标签都是给的例子, ...
- JVM 专题二十:垃圾回收(四)垃圾回收器 (一)
1. GC分类与性能指标 垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商.不同版本的JVM来实现.由于JDK的版本处于高速迭代过程中,因此Java发展至今已经产生了众多的GC版本.从不同角度分 ...
- day6:双向循环练习&pass_break_continue&for循环
双向循环练习 1.打印10行10列的小星星(两个循环) # j 外循环用来控制行数 j = 0 while j < 10: # i 打印一行十个星星 i = 0 while i < 10: ...
- Linux-常见的命令
1.杀掉tomcat进程 ps -ef |grep tomcat kill -9 pid 2.启动http服务 service httpd start 3.停止mysql服务 servi ...