文章目录

  • 一.form的submit方法是否会触发onsubmit事件?
  • 二. 如何阻止表单的提交
    • 1.dom0方式绑定
    • 2.用dom2方式绑定(addEventListener)
  • 三.如何用代码触发onsumbit
    • 1.dom0方式绑定(参见二.1)
    • 2.dom2方式绑定(参见二.2)

一.form的submit方法是否会触发onsubmit事件?

测试代码如下:

<html><head><meta content="text/html; charset=gb2312" http-equiv="Content-Type"></head><form id='myform' target="_top" action="http://www.soso.com/q"><input type="text" name="w" value="ball"/><input type="submit" value="搜索" /></form><script>var obj = document.getElementById('myform');obj.onsubmit = function(){alert('check');return true;}obj.submit();</script>
</hmtl>

结果是,我们不会看到’check’的弹出框,所以结论是:

submit()方法不会触发onsubmit事件。

二. 如何阻止表单的提交

经常我们的提交表单前都会用js对表单内容作验证,如果有问题,则不希望提单表单。那么,如果阻止表单提交呢?

取决于你用什么方式给表单加入onsubmit事件。

1.dom0方式绑定

<script>var obj = document.getElementById('myform');var check = function(){if ('error'){//验证出错的情况just a demoreturn false;}else{return true;}}obj.onsubmit = function(){return check();}
</script>

用这种方式绑定onsubmit事件,表单能否提交取决于onsubmit函数的返回值。false时,表单不会提交。

2.用dom2方式绑定(addEventListener)

看下面这段代码:

<script>var obj = document.getElementById('myform');var check = function(){if ('error') {//验证出错的情况just a demoreturn false;}else {return true;}}function addListener(element, type, handler){if (!element) {return;}if (element.addEventListener) {element.addEventListener(type, handler, false);}else {//for ieelement.attachEvent("on" + type, handler);}}addListener(obj, 'submit', check);
</script>

你会发现,IE下,可以正常阻止表单提单,但FF及chrome下表单正常提交了…

原因:
ECMAScript Language Binding写明:

addEventListener(type, listener, useCapture)
The listener parameter is a EventListener object.

Object EventListener:This is an ECMAScript function reference. This method has no return value. The parameter is a Event object.

可见,listener是没有返回值的(写了也不会认),因此我们的check函数的返回值是不起作用的。

解决方式:

<script>
function check(ev) {if ('error') {//验证出错的情况just a demoev = ev || window.event; // Event对象if (ev.preventDefault) { // 标准浏览器ev.preventDefault();} else { // IE浏览器window.event.returnValue = false;}}
}
</script>

三.如何用代码触发onsumbit

这也取决于你用何种方式绑定onsubmit事件

1.dom0方式绑定(参见二.1)

这时直接调用onsumit方法即可,根据onsubmit()的返回值决定是否触发submit。

<script>
if (obj.onsubmit() != false){obj.submit();
}
</script>

2.dom2方式绑定(参见二.2)

<script>
if (obj.fireEvent) {//for ieif (obj.fireEvent('onsubmit')){obj.submit();}
}
else if (document.createEvent){var ev = document.createEvent('HTMLEvents');ev.initEvent('submit', false, true);obj.dispatchEvent(ev);
}
</script>

submit方法与onsubmit事件相关推荐

  1. js submit方法与onsubmit事件

    一.form的submit方法是否会触发onsubmit事件? 测试代码如下: <html> <head> <meta content="text/html; ...

  2. php onsubmit方法,表单元素的submit()方法和onsubmit事件应用概述

    表单元素拥有submit方法,同时也具有onsubmit事件句柄,用于监听表单提交.可以使用elemForm.submit();方法触发表单提交. 1.表单元素中出现了name="submi ...

  3. 表单元素的submit()方法和onsubmit事件

    表单元素拥有submit方法,同时也具有onsubmit事件句柄,用于监听表单提交.可以使用elemForm.submit();方法触发表单提交. 1.表单元素中出现了name="submi ...

  4. 表单的提交onsubmit事件

    看代码 留个记录: <script>function func(){alert('false');return false;} </script> <div>< ...

  5. form.submit 方法 并不会触发 form.onsubmit 事件

    做表单的时候发现一个奇怪的地方,总结下: form.submit 方法 并不会触发 form.onsubmit 事件,看代码: <body><div class="cont ...

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

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

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

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

  8. form表单中onclick事件和onsubmit事件的执行顺序

    说来很惭愧,今天因为form表单的一个小问题困扰了一下午.虽然最终得以解决,但花费的时间实在是令人汗颜,现在总结一下遇到的问题. 先说一下背景,之前帮一个朋友的项目写了一个原生js的表单验证,今天突然 ...

  9. 【onsubmit】Form表单onsubmit事件用法详解

    表单提交数据时,我们有时会用到onsubmit事件,那么onsubmit事件到底是干什么用的,在什么时候触发onsubmit事件以及如何使用onsubmit.本文章将向大家详细讲解onsubmit事件 ...

最新文章

  1. 数据库跟尾过多的错误,能够的原因阐发及处置惩罚设备
  2. ML之LGBMRegressor(Competition):2018年全国大学生计算机技能应用大赛《住房月租金预测大数据赛》——设计思路以及核心代码—191017再次更新
  3. 操作系统原理 : 非连续的内存分配,分段,页表
  4. CentOS新增用户并授予sudo权限
  5. jQuery验证表单插件——jquery-validation
  6. 有家创业公司花重金要请我当CTO?!
  7. 李国庆深夜发“15条真相”回应:关于原生家庭、同性恋、1.3亿...
  8. 【C11】complex
  9. perl模块net mysql_Perl模块实例化DBI Forks“Mysql服务器已经消失”
  10. 程序员面试金典——7.2碰撞的蚂蚁
  11. 拉格朗日插值与拉格朗日反演
  12. 网络唤醒Wake On Lan
  13. RS232串口的直连串口线和交叉串口线的区别
  14. ERROR: Command errored out with exit status 1
  15. Chloe Orm的使用(一)
  16. python离线环境迁移_Python离线项目迁移部署
  17. 【性能测试】Loadrunner12.55(二)-飞机订票系统-脚本录制
  18. 爱奇艺连续三年独家直播中网赛事 打造高端体育赛事生态矩阵
  19. 如何去开发一个webApp
  20. 安卓 View 开发 绘制尺子

热门文章

  1. 京东跟便利店搞一起了谁爽?谁不爽?
  2. Linux: 创建加密虚拟磁盘 cryptsetup
  3. aul软件oracle,AUL/MyDUL修复Oracle
  4. hexo同时在github和gitcafe搭建个人博客
  5. JS函数声明和预解析的理解
  6. matlab如何进对图像进行透视变换,如何根据已知的内在和外在参数在Matlab中进行透视校正?...
  7. docker离线包安装
  8. PostgreSQL index include - 类聚簇表与应用(append only, IoT时空轨迹, 离散多行扫描与返回)
  9. C语言因式分解的程序框图,C语言 · 因式分解
  10. Swing ButtonGroup