一.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 demo  return 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 demo  return false;  }  else {  return true;  }  }  function addListener(element, type, handler){  if (!element) {  return;  }  if (element.addEventListener) {  element.addEventListener(type, handler, false);  }  else {//for ie  element.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 demo  ev = 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 ie  if (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事件

js submit方法与onsubmit事件相关推荐

  1. submit方法与onsubmit事件

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

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

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

  3. js form表单onsubmit事件用法详解

    onsubmit事件是当表单提交时进行相关js操作的一个事件.(但是有疑问) onsubmit 事件会在表单中的确认按钮被点击时发生.当该事件触发的函数中返回false时,表单就不会被提交. 请看下面 ...

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

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

  5. js设置form的onsubmit事件

    document.getElementById('myform').onsubmit = function(e) {var e = e || window.event;if (e.preventDef ...

  6. 表单的提交onsubmit事件

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

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

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

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

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

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

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

最新文章

  1. 通信中dBFS、dBm、dBV、dBW、0dB、-3dB的定义
  2. go二维map_mirrorlang——从0设计二维内存寻址语言及vm(五.内存管理的思考)
  3. 八. 输入输出(IO)操作6.文件与目录管理
  4. 如何修复 Flutter 中的“正在检查 Dart SDK 版本... << 此时出乎意料”错误?
  5. 【Linux独家秘方】Linux 定时备份oracle库的数据
  6. 图文解说:Nginx+tomcat配置集群负载均衡
  7. iOS开发-自动隐藏键盘及状态栏
  8. boost序列化(Serialization)
  9. 论文计算机制图,计算机制图教学设计运用论文
  10. java 启动resin,Resin 启动时报错!解决方法
  11. npm WARN read-shrinkwrap This version of npm is compatible with lockfileVersion@1, but package-lock.
  12. could not create makefile due to some reason probably lack of necessary cocoapods
  13. 【算法杂谈】LJX的迪杰斯特拉算法报告
  14. JavaScript -- jQuery网页开发案例笔记
  15. 多机房UPS及环境集中监控方案丨UPS环境综合监控主机
  16. 机器学习系统设计和诊断方法学习总结
  17. 电路板脑洞微距大赏!
  18. Java Android 根据银行卡号判断银行名称
  19. 基于CNN模型的遥感图像复杂场景分类
  20. 魔兽世界335服务端架设对外网开放的步骤

热门文章

  1. Elastic: IllegalStateException: availableProcessors is already set to [8], rejecting [8]
  2. 数据备份与恢复最省心方案分享
  3. java 逆向工程、反向工程
  4. c# delegate知识
  5. GEE在ERA5数据集中提取流域日均温度
  6. Meta开源1750亿参数GPT-3,打脸OpenAI?网友点评:GPT-4都要来了
  7. 解决iText导出pdf文件中文字体不显示问题
  8. 《网络经济与企业管理》小结
  9. 如何计算一个简单激光腔中端面泵浦棒的热透镜
  10. 软件设计模式--第一章 软件设计模式基础