不同浏览器对回车提交表单的处理办法


Posted in Javascript onFebruary 13, 2010

条件是:
在IE和Firefox下
1、<form>属性的“action”字段必填;
2、有一个type="submit"的“input”。
在Chrome和Safari下
满足第一条即可。(注释1)

所以,如果要控制提交行为的话(比如,提交前检查必填项是否已填),可以在type="submit"的“input”后添加Javascript“onXXX(比如onClick)”事件。而如果需要用异步交互来检测相关字段,则无效了。因为return false是作为onreadystate=的子函数,并不能控制全局。这时就需要用到<form>的“onsubmit”属性(注释2)。比如:
HTML

<form name="form1" id="form1" action="act.php" method="post" onsubmit="myfn();return false;">

myfn()是自己定义的函数:无论通过什么办法(比如敲击“enter”或点击type="submit"(而不是type="button")的“input”按钮)提交,都会触发这个这个函数。于是,大可不必再在type="submit"的“input”后添加Javascript事件“onXXX”了。直接在“onsubmit”中控制,更直观与统一,除非有意控制提交方式(是onClick还是什么)。
return false位于末尾,表示不提交本表单。提交表单的字句document.form1.submit()可以作为myfn()的一个选择条件的分支。

总结:

这样,<form>有“action”和“onsubmit”属性,有type="submit"的“input”的提交按钮后,就可以在任何浏览器下(不行吗?请给我反馈)实现使用“Enter”键和鼠标都可以对表单的相关字段进行异步(Ajax)和同步(单纯的Javascript)检查并予以提交。
其他:
1、如果使用type="button"来异步检测相关字段呢?

这样,这个“input”必须得有一个事件触发器。在IE和FF下,无法直接在文本框中按下“Enter”来提交表单。如果要的话,需要使用额外的函数来监听用户按下了什么,给出一个怎样的反映(注释3)。更糟糕的是,在Ch和Sa下,会忽略是否有type="submit"按钮,而直接根据“action”属性来提交表单,如此以来,便无法实现预期的检测,可能还有更麻烦的后果。
2、如果不写“action”属性,直接异步提交表单呢?

这样,通过异步的方式提交表单,而不仅仅是检测,这个属性则没有必要。而且还是多余。假如这样能提供更好的用户体验,何乐而不为呢?呵呵。
【注释】
1 在IE8,FF,Ch中测试有效。Opera和Sa没有测试。

chrome在表单中敲回车键会触发提交表单 
一个登录口在IE、firefox下敲回车后用js通过ajax验证成功后进行跳转,几个输入框写在了一个form中,当用户输入用户密码后触发ajax进行判断,此时IE和firefox都不会进行进行form的提交,且form中没有submit.而chorm和safari都会把此时input所有的form进行submit. 以后ajax的话,切记不要写在form当中.

2 这篇文章
chrome 浏览器上避免回车提交表单 
之前在论坛上发过一贴,问: "在chrome浏览器上 
我改变回车按键或者让它无效也可以" 的问题,终无解 
问题当时是为了避免回车提交表单引出的,现在这个问题到是解决了,其实很简单,只怪自己没想到 
在Form的提交事件上动手脚: 
onsubmit=“MySubmit();return false;" 
MySubmit()可以用来做提交时的判断,如可一用另一个隐藏的表单完成自定义的提交任务。 
这个问题有点菜,但的在chrome上改变回车事件却不好搞,有知情者还望告知。

3 参考以前的文章
同时在IE和FF获取KeyCode
以前一直在IE8中测试网站,后来写的一部分含有Ajax的代码出现了故障,不得已下载了Firefox以及它的插件Firebug,才发现,FF不支持windows.event事件。于是换了一种思路。
HTML
<input type="password" name="psw" id="loginpsw" onkeypress="submit1(event)"/>
Javascript
function submit1(e){ 
var isie = (document.all) ? true : false;//判断是IE内核还是Mozilla 
var key; 
if (isie) 
key = window.event.keyCode;//IE使用windows.event事件 
else 
{ 
key = e.which;//3个按键函数有一个默认的隐藏变量,这里用e来传递。e.which给出一个索引值给Mo内核(注释1) 
} 
if(key==13) 
send1('loginemail','loginpsw');//触发的事件,可自定义 
}
Javascript 相关文章推荐
js DataSet数据源处理代码
Mar 29 Javascript
javaScript call 函数的用法说明
Apr 09 Javascript
获取客户端电脑日期时间js代码(jquery)
Sep 12 Javascript
Javascript中3个需要注意的运算符
Apr 02 Javascript
javascript事件委托的用法及其好处简析
Apr 04 Javascript
js css+html实现简单的日历
Jul 14 Javascript
jQuery  ready方法实现原理详解
Oct 19 Javascript
微信小程序 监听手势滑动切换页面实例详解
Jun 15 Javascript
JS设计模式之数据访问对象模式的实例讲解
Sep 30 Javascript
javascript+HTML5 canvas绘制时钟功能示例
May 15 Javascript
如何基于JS截获动态代码
Dec 25 Javascript
Node.js API详解之 readline模块用法详解
May 22 Javascript
Jquery iframe内部出滚动条
Feb 11 #Javascript
jquery 问答知识整理
Feb 11 #Javascript
改善你的jQuery的25个步骤 千倍级效率提升
Feb 11 #Javascript
jQuery 改变CSS样式基础代码
Feb 11 #Javascript
jQuery 添加/移除CSS类实现代码
Feb 11 #Javascript
JavaScript Event学习补遗 addEventSimple
Feb 11 #Javascript
JavaScript 输入框内容格式验证代码
Feb 11 #Javascript
You might like
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
PHP使用SOAP调用API操作示例
2018/12/25 PHP
详解no input file specified 三种解决方法
2019/11/29 PHP
javascript中日期转换成时间戳的小例子
2013/03/21 Javascript
JavaScript判断表单中多选框checkbox选中个数的方法
2015/08/17 Javascript
jquery 实现滚动条下拉时无限加载的简单实例
2016/06/01 Javascript
BootStrap.css 在手机端滑动时右侧出现空白的原因及解决办法
2016/06/07 Javascript
微信小程序加载更多 点击查看更多
2016/11/29 Javascript
zTree异步加载展开第一级节点的实现方法
2017/09/05 Javascript
Angular弹出模态框的两种方式
2017/10/19 Javascript
Bootstrap Paginator+PageHelper实现分页效果
2018/12/29 Javascript
浅谈在Vue.js中如何实现时间转换指令
2019/01/06 Javascript
nodejs的安装使用与npm的介绍
2019/09/11 NodeJs
[00:34]TI7不朽珍藏III——纯金地穴编织者饰品展示
2017/07/15 DOTA
调试Python程序代码的几种方法总结
2015/04/28 Python
python用BeautifulSoup库简单爬虫实例分析
2018/07/30 Python
python 实现A*算法的示例代码
2018/08/13 Python
Python Pandas数据中对时间的操作
2019/07/30 Python
Python Django实现layui风格+django分页功能的例子
2019/08/29 Python
一行Python代码制作动态二维码的实现
2019/09/09 Python
关于Theano和Tensorflow多GPU使用问题
2020/06/19 Python
Django Admin 上传文件到七牛云的示例代码
2020/06/20 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
2021/02/22 Python
css3实现文字扫光渐变动画效果的示例
2017/11/07 HTML / CSS
Missguided美国官网:英国时尚品牌
2018/01/18 全球购物
Bally澳大利亚官网:瑞士奢侈品牌
2018/11/01 全球购物
澳大利亚波西米亚风连衣裙在线商店:Fortunate One
2019/04/01 全球购物
设置器与访问器的定义以及各自特点
2016/01/08 面试题
本科生职业生涯规划书范文
2014/01/21 职场文书
经典英文广告词
2014/03/18 职场文书
幼儿园开学寄语
2014/04/03 职场文书
护理目标管理责任书
2014/07/25 职场文书
常务副总经理岗位职责
2015/02/02 职场文书
2016教师廉洁教育心得体会
2016/01/13 职场文书
幼儿园教学反思范文
2016/03/02 职场文书
详解Python如何批量采集京东商品数据流程
2022/01/22 Python