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

条件是:
在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');//触发的事件,可自定义
}

时间: 2024-11-08 18:19:17

不同浏览器对回车提交表单的处理办法_javascript技巧的相关文章

js禁止回车提交表单的示例代码_javascript技巧

如下所示; 复制代码 代码如下: function ifenter(){   if(event.keyCode==13){  return   false;  }else if(event.srcElement.type=="submit"){   form1.submit();   }  }   document.onkeydown=ifenter;

Form表单按回车自动提交表单的实现方法_javascript技巧

1.form表单中只有一个input标签,按回车键将自动提交表单 当form表单中只有一个<input type="text" name='name' />时按回车键将会自动将表单提交. <form id='form1' action='a1.jsp' method='post'> <input type='text' name='name' /> </form> 如果不想让其自动提交可以这样做: 再添加一个<input type=

JS中artdialog弹出框控件之提交表单思路详解_javascript技巧

artDialog是一个基于javascript编写的对话框组件,它拥有精致的界面与友好的接口. 前言: 自适应内容 artDialog的特殊UI框架能够适应内容变化,甚至连外部程序动态插入的内容它仍然能自适应,因此你不必去考虑消息内容尺寸使用它.它的消息容器甚至能够根据宽度让文本居中或居左对齐--这一切全是XHTML+CSS原生实现. 完善的接口 它的接口完善,可以轻易与外部程序配合使用.如异步写入消息.控制位置.尺寸.显示与隐藏.关闭等. 细致的体验 如果不是在输入状态,它支持Esc快捷键关

ionic cordova一次上传多张图片(类似input file提交表单)的实现方法_javascript技巧

我们可以通过cordova提供的插件调用摄像头或图库选择需要的图片上传,按cordova官方的方法,每次选择完后就直接上传,这并不符合用户的习惯,最好的用户习惯是用户选择完需要的图片,并可在本地预览,接着用户再次打开摄像头或图库再次选择图片,接着预览,对于不需要的图片删除,最后确定可以后,再一次性上传所有图片.显然这种方式,cordova是不支持,那要如何实现呢,以下是我的方法: 通过调用$cordovaImagePicker.getPictures该方法打开图库,获得图片的URL地址,ps:相

form.submit()不能提交表单的原因分析_javascript技巧

直接上代码把: 复制代码 代码如下: <div id="register"> <h4>会员注册</h4> <div class="formdiv"> <form method="post" action="register.php?action=register" name="register" id="registerForm"&g

JS中的form.submit()不能提交表单的错误原因_javascript技巧

直接上代码把: 复制代码 代码如下: <div id="register">      <h4>会员注册</h4>      <div class="formdiv">          <form method="post" action="register.php?action=register" name="register" id="r

js判断所有表单项不为空则提交表单的实现方法_javascript技巧

demo1.html <html> <head> <title>提交表单页</title> <script type="text/javascript"> function myCheck() { for(var i=0;i<document.form1.elements.length-1;i++) { if(document.form1.elements[i].value=="") { alert(

禁止空格提交表单的js代码_javascript技巧

在做项目的时候,有个页面我用到了ckeditor,可是问题来了,我在只要有文本框的地方按下回车键就会自动刷新.最后终于找到了解决的方法: 复制代码 代码如下: <input type="text" name="mes.mesTitle" value="<s:property value='mes.mesTitle'/>" class="InputStyle" onkeydown="keydown(t

JavaScript实现CTRL+回车提交表单

javascript|提交表单 <script type="text/javascript"> //Ctrl+回车 提交表单 // 例: <textarea name="textarea" ></textarea> // 注意: Form 必须有 Name 或 ID      function submitForm(formID) {         if(window.event.ctrlKey&&window.