说来很惭愧,今天因为form表单的一个小问题困扰了一下午。虽然最终得以解决,但花费的时间实在是令人汗颜,现在总结一下遇到的问题。

先说一下背景,之前帮一个朋友的项目写了一个原生js的表单验证,今天突然被找到说表单验证无效。虽然很震惊我写的代码有这种事(毕竟当时学js时间不长,而且距离当时近五个月了),但作为一个有始有终的人,还是要 义不容辞的调bug。得到的反馈是说表单里有两项判空验证是失效的,无论对错都会提交表单,我的第一感觉是判空的函数被改坏了,想着改回来就好了。看到源代码的情况,比我想象的要复杂,html页面中夹杂着很多后台同学自己写得js代码。当然,问题还是得解决。找到我写的表单验证代码,逐行检查,反复调试,都没问题,再看调用函数关系,得到的返回值正常显示。

下面是代码结构:

window.οnlοad=function(){odiv.οnsubmit=function(){if(!validate()){     //validate()函数包含了多个表单验证方法return false;//阻止表单默认提交}else return true;};
}
<input οnclick="myajax()" type="submit" value="提交" /></span>

然而,即使在明确得到return值为false时,还可以正常提交,经过反复测试发现问题最终出现在<input>中,代码如下:

这里写了onclick事件,myajax()是ajax异步传输数据,那么onsubmit事件和onclick事件的执行顺序呢?

简单的测试下:

<script>

    function X(){alert(11);return false;}function Y(){alert(1);}</script><body><form action="#" method="post" name="form1" οnsubmit="return X();"><input type="text" value="" /><input οnclick="Y()" type="submit" value="提交" /></form></body>

得出结论:

onclick先于onsubmit执行,若onsubmit返回值为true,执行submit;

所以合理的执行顺序很重要,否则会有不必要的错误;当然就解决先前bug来说,可以这样写:

window.οnlοad=function(){

     odiv.οnsubmit=function(){if(!validate()){     //validate()函数包含了多个表单验证方法return false;//阻止表单默认提交}else    myajax();};
};

虽然最终还是解决了问题,但是花费了很长时间,这是很得不尝失的,所以,代码规范化很重要。

当然,不仅仅是代码看起来更加优雅、高效,更重要的是避免事件冲突,减少错误发生的可能性。

form表单中onclick事件和onsubmit事件的执行顺序相关推荐

  1. form表单验证时的onsubmit事件

    form标签提交时,会触发onsubmit事件.onsubmit会在提交之前发生,所以验证可以写在onsubmit中. <!DOCTYPE html> <html> <h ...

  2. form表单的action和onsubmit事件说明

    首先 action在form是属性,onsubmit是事件. <form action="table1.jsp" onSubmit="return check(); ...

  3. 前端:JS/32/form对象(表单)(form对象的属性,方法和事件),受返回值影响的两个事件(onclick事件,onsubmit事件),获取表单的元素对象的三种方式,表单的提交和验证方法总结

    form 对象(表单) 一个<form>标记,就是一个<form>对象: 1,form对象的属性 name :表单的名称,主要用来让JS来控制表单: action :表单的数据 ...

  4. form表单中的onSubmit

    今天看一个代码,突然发现了一个form表单中的onSubmit,估计是好久都没有写前端表单提交了,突然忘了,赶紧到网上查了查. 原文地址:https://www.cnblogs.com/ahudyan ...

  5. form的submit()方法不能触发onsubmit事件的解决方法,兼容各版本浏览器。

    form的submit()方法不能触发onsubmit事件的解决方法,兼容各版本浏览器. 参考文章: (1)form的submit()方法不能触发onsubmit事件的解决方法,兼容各版本浏览器. ( ...

  6. html表单提交按钮代码,JavaScript在form表单中使用button按钮实现submit提交方法

    submit是button的一个特例,也是button的一种,它把提交这个动作自动集成了,submit和button,二者都以按钮的形式展现,看起来都是按钮,所不同的是type属性和处发响应的事件上. ...

  7. form表单中根据值判断是否disabled_Java 0基础入门 (Html表单、表单元素)

    上一篇:Java 0基础入门 (Html标签的使用) 表单在网页中主要负责数据采集功能. 一.表单实际应用场景 百度搜索 5173注册 如上两张图,图中的黑色线条是我画上去的,如果按照黑线,在Excl ...

  8. 关于继承BaseServlet后为什么form表单中必须加上method=“post”

     关于继承BaseServlet后为什么form表单中必须加上method="post"            学习Servlet中一直有个困惑,在提交form表单时我action ...

  9. 在form表单中添加一个隐藏的reset按钮,

    //在form表单中添加一个隐藏的reset按钮, <input type="reset" style="display:none;" /> //然 ...

最新文章

  1. 沈阳构建智慧产业体系 大数据企业5年后将超200家
  2. yii表单ajax验证,yii2 modal弹窗之ActiveForm ajax表单异步验证
  3. c语言指针++_C ++此指针| 查找输出程序| 套装3
  4. 关于服务器虚化的优势,vmware虚化优势.docx
  5. rabbitmq 查看消费者_RabbitMQ 和 Kafka 的比较
  6. Java之正則表達式【使用语法】
  7. 英文课程名称 c语言程序设计,课程名称C语言程序设计I.doc
  8. SQL:postgresql修改某字段的部分内容
  9. java泛型为类类型_Java泛型:仅定义为返回类型的通用类型
  10. Linux如何搜索查找文件里面内容
  11. 使用IIS Live Smooth Streaming技术搭建流媒体直播系统
  12. php 分段mp4合并,下载一个特殊的m3u8视频并合并为MP4
  13. CDCAS: A Novel Cloud Data Center Security Auditing System
  14. abaqus质量缩放系数取值_ABAQUS中的质量缩放
  15. Flink Watermark 机制浅析(透彻)
  16. OCL功率放大电路分析笔记
  17. IQ使命 Marrakech 马拉喀什(六边形图案)攻略
  18. 中医卫统直报、重点专科、绩效考核病案首页字段汇总-标出差异
  19. 创建RF测试库之使用装饰器@keyword
  20. matlab爆内存电脑卡死,电脑卡死怎么办?电脑卡顿的原因和解决办法

热门文章

  1. 【综述】机器视觉中的3D传感器
  2. Playcanvas动画格式解析
  3. 【元胞自动机】元胞自动机交通事故通行【含Matlab源码 1345期】
  4. JVM G1 源码分析(七)- Full GC
  5. 时间复杂度的规则与计算
  6. SIMD<SIMT<SMT: NVIDIA GPU的并行机制
  7. 计算机系统基础期末复习--袁春风详细版
  8. 利用java swing编写一个简易的计算器,实现了括号,优先级,三角函数,阶乘等功能
  9. gensim : AttributeError: The vocab attribute was removed from KeyedVector in Gensim 4.0.0.
  10. 液晶监控屏:大屏领域已占据主导地位